3

这是我的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);

请看这张图片:

在此处输入图像描述

第三种形式是我想要的,但我不知道如何计算字体的大小以适应高度(不是宽度),因为不同的字体具有不同的高度,并且不同FontFamily.LineSpacing

注意:我不想使用ViewBox,因为我想将文本动画化为爬网文本和股票行情。

更新:

有些字体需要FontSize超过高度的控制,这取决于FontFamily.LineSpacing. 我可以通过设置来删除上部空间LineHeight,但我无法计算新的 FontSize 基于FontFamily.LineSpacing

请帮我。

4

2 回答 2

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

如果这种增量方式要减慢...尝试使用如下图所示的近似值来实现: 在此处输入图像描述

于 2016-05-11T15:41:49.427 回答
1

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

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

于 2016-05-11T15:34:55.823 回答