我想知道如何在Window Universal Application中计算给定FontFamily
的高度。
在 UWP 中,FontFamily
对象具有LineSpacing
属性,可以计算分配字体所有字形的最大高度,但是&#39 ;不适用于UWP应用程序。
注意:关于"重复声明",使用TextBlock测量身高不是我的选择。除了是一个丑陋的技巧,它使用UI对象来做到这一点。就我而言,我不能这样做,因为我自己制作了一个GUI框架。依赖UWP框架内部的对象是没有意义的。
答案 0 :(得分:1)
您可以使用TextBlock的Measure方法来测量宽度和高度。这是一种hacky,但能胜任。
private Size MeasureString(string textToMeasure, Size availableSize, double fontSize, string fontFamily)
{
var tb = new TextBlock();
tb.TextWrapping = TextWrapping.Wrap;
tb.Text = textToMeasure;
tb.FontFamily = new FontFamily(fontFamily);
tb.FontSize = fontSize;
tb.Measure(new Size(Double.PositiveInfinity, double.PositiveInfinity));
return new Size(tb.ActualWidth, tb.ActualHeight);
}
这里的技巧是在measure方法中使用无限大小来获得实际大小。
另一个可行的选择是用户的Microsoft Win2D UWP库。它有一个CanvasFontFace类,其中包含您正在寻找的所有内容。我没有亲自使用它,但它应该适合你的目的。