2011-02-24 248 views
1

可能重复:
WPF 4: Grow/Shrink TextBlock (Font Size) based on available space在WPF中自动调整字体大小?

我是个寻找在WPF中的下列行为: 所有在我的应用程序将TextBlock显示在24字体大小,但如果有ISN”足够的空间,我会减少字体大小。

我想两种解决方案,但他们没有工作:

  1. 把一个文本框里面视框。不起作用,因为所有标签开始获得不同的尺寸。
  2. 如果这将是一个按钮,我会 指定一个MinWidth而不是宽度, 但在TextBlock上没有属性 MinFontSize。 编辑:
  3. 创建属性MinTextWidth自定义控制(这可能工作)

任何其他解决方案,将工作?

+0

它将工作把整个一大堆的文本块放在一个大的viewbox? – 2011-02-24 16:07:34

+0

我会建议不要缩小字体大小,而要按照其他字体大小来缩短字符串以适合使用省略号。 – Lazarus 2011-02-24 16:12:30

+0

嗯,我认为它不会因为它会确保所有元素都被缩放而不是单个元素改变它的大小 – Vitalij 2011-02-24 16:14:15

回答

1

我会说这是一个设计问题,如果用户看不到整个项目,缩小文本可能不会帮助,因为它可能使它不可读。

你应该考虑做些TextBlock增长以适合文本的东西,或者使用扩展器或其他东西来让它们看到文本的其余部分。

+0

是的,如果它是一个文本而不是数值。文本是数字的,并显示在仪表上,并且在正常情况下应该适合可用空间,但是在某些输入超出范围的情况下,必须显示它并减小字体大小比修剪文本。 – Vitalij 2011-02-26 12:46:02

0

我认为这个问题没有通用的解决方案。有一个简单的方法:窗口的布局根目录是ViewBox。另一种方式,我认为是编写自定义控件并动态更改ScaleTransform(而不是FontSize - 这可能会导致性能问题)。

+0

将所有内容放入ViewBox的问题是,当没有足够的空间时,所有的内容都会被平等地缩放,而不是让单独的文本框减小它的大小。 – Vitalij 2011-02-24 21:07:59

+0

制作自定义控件是一个选项,但是如果您更改ScaleTransform而不是字体大小,它不会影响文本框的实际大小。 – Vitalij 2011-02-24 21:30:25

+1

@Vitalij:好的,但可以逐步更改字体大小,例如12,13,14,15,...不要使用计算的double值,在这种情况下,PresentationFontCache可能会消耗大量内存。 – 2011-02-25 03:07:54