2017-02-10 93 views
0

我想知道如何计算窗口通用应用程序中给定的FontFamily的高度。如何计算UWP中FontFamily的高度?

UWP,则FontFamily对象有一个LineSpacing特性,使得它可以计算最大高度分配字体的所有字形,但它不适用于UWP应用。

通知:关于“重复索赔”,使用TextBlock来测量身高不是我的选择。除了是一个丑陋的伎俩,它使用一个UI对象来做到这一点。就我而言,我无法这样做,因为我自己在制作GUI框架。在UWP框架内依赖对象是没有意义的。

回答

1

您可以使用TextBlock的Measure方法来测量宽度和高度。这是一种哈克,但做这项工作。

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); 
} 

这里的技巧是在度量方法中使用无限大小来获取实际大小。

另一个可行的选择是用户微软的Win2D UWP库。它有一个CanvasFontFace类,其中包含您要查找的所有内容。我没有亲自使用它,但它应该为你的目的工作。

+0

对不起,但这不是我的选择。我正在创建一个GUI框架,我无法使用任何本机控件来计算它。 – SuperJMN

+0

@SuperJMN有道理。看起来我在你评论之前编辑了我的文章。我添加了另一个不使用任何本机控件的选项。行! – hankide

+0

行!请参阅我的新问题http://stackoverflow.com/questions/42162481/how-to-calculate-the-height-of-a-fontfamily-with-win2d。看来这个班级在内部使用。我不知道如何使用它,或者:(我不能直接实例化它,并且文档没有解释太多。) – SuperJMN