Fonts 在WinRT中计算字体基线

Fonts 在WinRT中计算字体基线,fonts,windows-runtime,baseline,Fonts,Windows Runtime,Baseline,我想在WinRT中找到答案 我还通过计算特定字体的文本大小,但我不确定如何计算基线。这在WinRT中可能吗?不幸的是,您要查找的是WPF中存在的、WinRT中不存在的格式化文本(我甚至不认为它在silverlight中) 它可能会包含在未来的版本中,因为它似乎是一个非常受欢迎的功能,被严重遗漏,而且团队意识到它的遗漏。请参见此处: 如果您感兴趣或者确实非常需要一种方法来测量类型面的细节,您可以尝试为DirectWrite编写一个包装器,据我所知,该包装器位于WinRT可用技术堆栈中,但是只能通过

我想在WinRT中找到答案


我还通过计算特定字体的文本大小,但我不确定如何计算基线。这在WinRT中可能吗?

不幸的是,您要查找的是WPF中存在的、WinRT中不存在的格式化文本(我甚至不认为它在silverlight中)

它可能会包含在未来的版本中,因为它似乎是一个非常受欢迎的功能,被严重遗漏,而且团队意识到它的遗漏。请参见此处:

如果您感兴趣或者确实非常需要一种方法来测量类型面的细节,您可以尝试为DirectWrite编写一个包装器,据我所知,该包装器位于WinRT可用技术堆栈中,但是只能通过C访问++

如果您想尝试,这里有几个出发点:

希望这对你有帮助,祝你好运

更新

我考虑了一会儿,记得
TextBlock
s有一个经常被遗忘的属性
BaselineOffset
,它为您提供了从框顶部为所选类型面的基线下降!因此,您可以使用每个人用来替换
MeasureString
的相同的hack来替换
FormattedText
的丢失。这是酱汁:

    private double GetBaselineOffset(double size, FontFamily family = null, FontWeight? weight = null, FontStyle? style = null, FontStretch? stretch = null)
    {
        var temp = new TextBlock();
        temp.FontSize = size;
        temp.FontFamily = family ?? temp.FontFamily;
        temp.FontStretch = stretch ?? temp.FontStretch;
        temp.FontStyle = style ?? temp.FontStyle;
        temp.FontWeight = weight ?? temp.FontWeight;

        var _size = new Size(10000, 10000);
        var location = new Point(0, 0);

        temp.Measure(_size);
        temp.Arrange(new Rect(location, _size));

        return temp.BaselineOffset;
    }
我用它来做这个:


太好了!正确的?希望这能有所帮助-ck

哇,是的,那太完美了!我在寻找这个问题时看到了那个财产,但出于某种原因,我拒绝了它。。。但它的工作原理完全正确。