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