在WinRT中计算字体基线

4
我希望找到WinRT中字体基线的位置。
我已经通过创建虚拟TextBlock计算了特定字体的文本大小,但是我不确定如何计算基线。在WinRT中是否可能实现这一点?
1个回答

2
不幸的是,您正在寻找的是WPF中存在但在WinRT中不存在的FormattedText [MSDN: 1 2]。
由于它似乎是一个非常受欢迎的功能,被急需并且团队也知道它的遗漏,所以它很可能会包含在将来的版本中。请参见这里:http://social.msdn.microsoft.com
如果你对测量字体的具体规格感兴趣或者真的非常需要这样的工具,你可以尝试编写一个DirectWrite的包装器。据我所知,它是WinRT可用技术堆栈中的一部分,但只能通过C++访问。
以下是几个入门点,如果你想尝试: 希望这有所帮助,祝你好运!-ck 更新 我思考了一下,想起了有一个常被忽视的属性BaselineOffset,它可以给出所选择字体从框顶到基线的距离!因此,你可以使用每个人都在使用的同样的方法来替换MeasureString,以替代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;
    }

我用它来做这个: screenshot 完美!对吧?希望这能帮到你。-ck

哇,是的那很完美!我在寻找这个问题时看到过那个属性,但出于某些原因将其忽略了... 但它确实完全正确。 - Tom Lokhorst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接