当前位置:  开发笔记 > 编程语言 > 正文

在WPF中测量文本

如何解决《在WPF中测量文本》经验,为你挑选了3个好方法。

使用WPF,测量大量短字符串的最有效方法是什么?具体来说,我想确定每个字符串的显示高度,给定统一格式(相同的字体,大小,重量等)和字符串可能占用的最大宽度?



1> Daniel Earwi..:

最低级别的技术(因此为创造性优化提供最大范围)是使用GlyphRuns.

它没有很好的记录,但我在这里写了一个小例子:

http://smellegantcode.wordpress.com/2008/07/03/glyphrun-and-so-forth/

该示例将字符串的长度计算为渲染之前的必要步骤.



2> 小智..:

它非常简单,由FormattedText类完成!试试吧.



3> Martin Lotte..:

在WPF中:

记得在读取DesiredSize属性之前调用TextBlock上的Measure().

如果TextBlock是即时创建的,但尚未显示,则必须先调用Measure(),如下所示:

MyTextBlock.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));

return new Size(MyTextBlock.DesiredSize.Width, MyTextBlock.DesiredSize.Height);

在Silverlight中:

无需衡量.

return new Size(TextBlock.ActualWidth, TextBlock.ActualHeight);

完整的代码如下所示:

public Size MeasureString(string s) {

    if (string.IsNullOrEmpty(s)) {
        return new Size(0, 0);
    }

    var TextBlock = new TextBlock() {
        Text = s
    };

#if SILVERLIGHT
    return new Size(TextBlock.ActualWidth, TextBlock.ActualHeight);
#else
    TextBlock.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));

    return new Size(TextBlock.DesiredSize.Width, TextBlock.DesiredSize.Height);
#endif
}

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有