如何在WPF中测量多行文字?

时间:2018-10-17 12:19:35

标签: wpf string multiline measure

标题确实说明了一切...我需要知道如何在WPF中测量多行文本。我真的不敢相信这里还没有问过这个问题。

我找到了用于测量WPF(WPF equivalent to TextRenderer)中的单行文本或Windows Forms(C# – Measure String Width & Height (in pixels) Including Multi-line Text)中的多行文本而不是WPF中的多行文本的解决方案。我不能使用Windows Forms DLL,因为我需要在不基于UI的非基于UI的项目中测量字符串。

为进一步说明,我需要一种方法,例如Graphics.MeasureString方法,我可以将设置的宽度传递给该方法,该方法将返回在UI中呈现字符串所需的高度(以像素为单位)...无需使用与UI相关的DLL就可以使用。

1 个答案:

答案 0 :(得分:1)

您可以创建一个FormattedText实例并设置其MaxTextWidth属性,从而使文本自动换行。然后或者从Bounds属性中获取其几何形状的Extent,或者也许只是它的高度:

var testString = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor";

var formattedText = new FormattedText(
    testString,
    CultureInfo.InvariantCulture,
    FlowDirection.LeftToRight,
    new Typeface("Segoe UI"),
    20,
    Brushes.Black);

formattedText.MaxTextWidth = 200;

var bounds = formattedText.BuildGeometry(new Point(0, 0)).Bounds;
var height = formattedText.Extent;

但是不确定heightbounds.Height为什么不完全相等。