【问题标题】:Auto resizing font in WPF? [duplicate]在 WPF 中自动调整字体大小? [复制]
【发布时间】:2011-07-03 16:36:15
【问题描述】:

可能重复:
WPF 4: Grow/Shrink TextBlock (Font Size) based on available space

我正在寻找 WPF 中的以下行为: 我的应用程序中的所有 TextBlock 都以 24 号字体大小显示,但如果没有足够的空间,我会减小字体大小。

我想到了两种解决方案,但都没有奏效:

  1. 在视图框内放置一个文本框。不起作用,因为所有标签都开始变得不同大小。
  2. 如果那是一个按钮,我会 指定 MinWidth 而不是 Width, 但没有属性称为 文本块上的 MinFontSize。 编辑:
  3. 使用属性 MinTextWidth 创建一个自定义控件(这可能有效)

还有其他可行的解决方案吗?

【问题讨论】:

  • 将一大堆文本块放在一个大视图框中是否可行?
  • 我建议不要减小字体大小,而是跟随其他人的引导并使用省略号缩短字符串以适应。
  • 嗯,我认为它不会,因为它只会确保所有元素都被缩放,而不是单个元素改变它的大小
  • textBox 中的数据是数值型的,对用户来说至关重要,没有空间可以换行,必须显示。但这是一个很好的解决方案,我在显示很多文字的地方都使用过,但是在这种情况下我无法使用它。

标签: c# wpf textbox


【解决方案1】:

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

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

【讨论】:

  • 是的,如果它是文本而不是数值。文本是数字的并显示在仪表上,在正常情况下应该适合可用空间,但是在输入超出范围的某些情况下,必须显示它并且减小字体大小比修剪字体更好文本。
【解决方案2】:

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

【讨论】:

  • 将所有内容放入 ViewBox 的问题在于,所有内容都将被平均缩放,而不是在空间不足时让单个文本框减小其大小。
  • 可以选择制作自定义控件,但是如果您更改 ScaleTransform 而不是字体大小,它不会影响文本框的实际大小。
  • @Vitalij:好的,但是要逐步改变字体大小,例如 12,13,14,15,... 不要使用计算的 double 值,在这种情况下,进程 PresentationFontCache 可能会消耗很多记忆。
  • 是的,你是对的,如果我使用双精度而不是整数作为字体大小,它只会有大量缓存的字体而不是少数。
  • @Vitalij:你找到解决方案了吗?
猜你喜欢
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 2011-02-28
  • 2011-02-07
  • 1970-01-01
相关资源
最近更新 更多