WPF格式化文本:计算字体大小以填充可用高度空间

时间:2016-05-11 15:26:44

标签: c# wpf font-size formatted-text

这是我的FormattedText,它是画布的孩子:

             this.formattedText = new FormattedText(
                                "This is a text to test",
                                CultureInfo.CurrentUICulture,
                                this.FlowDirection,
                                new Typeface(this.FontFamily, this.FontStyle, this.FontWeight, FontStretches.Normal),
                                this.FontSize,
                                Fill);

请看这张图片:

enter image description here

第三种形式是我想要的东西, 但我不知道如何计算适合身高的字体大小(非宽度), 因为有不同的字体,不同的高度和不同的FontFamily.LineSpacing

注意:我不想使用ViewBox,因为我想将文本设置为抓取文本和自动收录器的动画。

更新

某些字体需要FontSize超过控件的高度,它取决于FontFamily.LineSpacing。我可以通过设置LineHeight来移除上部空格,但我无法根据FontFamily.LineSpacing计算新的FontSize。

请帮帮我。

2 个答案:

答案 0 :(得分:3)

您可以使用循环来获取最大字体大小(步骤1):

int MaxFontSize = 0;
FormattedText Ft = ... //Your formatted text
while(true)
{
  Ft.SetFontSize(MaxFontSize);
  if (Ft.Height > MaxHeigthOfControl)
  {
    //Too large! Maxmimum size found one step before
    MaxFontSize--;
    break;
  }
  else
  {
    MaxFontSize++;
  }
}
//MaxFontSize is the maximum possible FontSize

如果这种增量方式要慢......试着用这样的图片所示的aproximation来做: enter image description here

答案 1 :(得分:1)

好的,您需要了解FormattedText控件比您想象的更复杂。

有一个LineHeightBaseLineTextAlignment属性会影响您感兴趣的布局区域。请尝试更改这些属性以获得所需内容