如何计算UWP中FontFamily的高度?

时间:2017-02-10 14:40:46

标签: c# .net fonts uwp

我想知道如何在Window Universal Application中计算给定FontFamily的高度。

UWP 中,FontFamily对象具有LineSpacing属性,可以计算分配字体所有字形的最大高度,但是&#39 ;不适用于UWP应用程序。

注意:关于"重复声明",使用TextBlock测量身高不是我的选择。除了是一个丑陋的技巧,它使用UI对象来做到这一点。就我而言,我不能这样做,因为我自己制作了一个GUI框架。依赖UWP框架内部的对象是没有意义的。

1 个答案:

答案 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类,其中包含您正在寻找的所有内容。我没有亲自使用它,但它应该适合你的目的。