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

C# WPF格式文本:计算字体大小以填充可用高度空间,c#,wpf,font-size,formatted-text,C#,Wpf,Font Size,Formatted Text,这是我的格式化文本,它是画布的子级: this.formattedText = new FormattedText( "This is a text to test", CultureInfo.CurrentUICulture, this.FlowDirection,

这是我的
格式化文本
,它是画布的子级:

             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
,因为我想将文本动画化为爬网文本和ticker

更新:

有些字体需要比控件的高度更大的
FontSize
,这取决于
fontfamine.linespace
。我可以通过设置
LineHeight
来删除上面的空格,但我无法根据
fontfamice.LineSpacing
计算新的FontSize


请帮助我。

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


有一个
线宽
基线
文本对齐
属性将影响您感兴趣的布局区域。尝试更改这些属性以获得所需的内容

您可以使用循环获得最大字体大小(步长1):

如果这种递增的方式是减缓。。。尝试使用如图所示的近似值执行此操作:

感谢您的重播,但我使用了
行高
来删除上部空间(如图中所示),
基线
是只读的,
文本对齐
属性不影响。嗯……您是否尝试将
格式化文本
字体大小设置为
此高度
<代码>this.formattedText=新格式化文本(“这是要测试的文本”,CultureInfo.CurrentUICulture,this.FlowDirection,新字体(this.FontFamily,this.FontStyle,this.FontWeight,FontStretching.Normal),此。高度,填充)是的,我还将
FontSize
设置为父级高度。但问题是空间较低。(有些字体需要大于控制高度的大小,这取决于
FontFamily.LineSpacing
。我可以通过设置
LineHeight
来删除上部空间,但我无法计算新的FontSize来删除下部空间。感谢您的重播,我还设置了可能的最大值
FontSize
,但问题是存在上部和下部空间。我可以通过设置
线宽来删除上部空间,但无法删除下部空间。
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