【问题标题】:How to calculate the height of a FontFamily in UWP? [duplicate]如何计算 UWP 中 FontFamily 的高度? [复制]
【发布时间】:2017-06-28 22:58:35
【问题描述】:

我想知道如何在 Window 通用应用程序中计算给定 FontFamily 的高度。

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

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

【问题讨论】:

    标签: c# .net fonts 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);
    }
    

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

    另一个可行的选择是使用 Microsoft 的 Win2D UWP 库。它有一个 CanvasFontFace 类,其中包含您要查找的所有内容。我没有亲自使用它,但它应该可以满足您的目的。

    【讨论】:

    • 对不起,但这不是我的选择。我正在创建一个 GUI 框架,但我无法使用任何本机控件来计算它。
    • @SuperJMN 有道理。看起来我在你评论之前编辑了我的帖子。我添加了另一个不使用任何本机控件的选项。
    • 好的!请参考我的新问题stackoverflow.com/questions/42162481/…。似乎该类是在内部使用的。我也不知道如何使用它:(我不能直接实例化它,文档也没有解释太多。
    • 哦,我的错。一旦我在我的 Windows 计算机上,我会看看它。
    • 你看了吗? :) 谢谢!
    猜你喜欢
    • 2017-06-28
    • 2016-10-20
    • 2013-03-28
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 2021-06-05
    相关资源
    最近更新 更多