标题确实说明了一切...我需要知道如何在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就可以使用。
答案 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;
但是不确定height
和bounds.Height
为什么不完全相等。