FormattedText.GetMaxTextWidths返回null - 为什么?
问题描述:
我想了解一些文本是多宽。这是我的代码:FormattedText.GetMaxTextWidths返回null - 为什么?
FormattedText ft = new FormattedText("Line 1\r\nLine 2",
System.Globalization.CultureInfo.CurrentCulture,
System.Windows.FlowDirection.LeftToRight,
new Typeface(FontFamily, FontStyle, FontWeight, FontStretch),
fontSize,
brush);
double[] w = ft.GetMaxTextWidths();
问题是w始终为空。你知道为什么吗?
答
FormattedTextClass
不会告诉你最大线宽是多少。它反过来工作;你可以告诉它最大的宽度,它会指出如何显示文本。
这MSDN文章提供了更多信息:Drawing Formatted Text
以示例代码和重写OnRender
事件的一个窗口,这里是一行文字看起来当没有约束被放置在宽度,如:
当MaxTextWidth
被设定为300:
并且当SetMaxTextWidths
被称为传递的{ 200, 500, 100 }
双阵列(最后宽度被用于所有剩余的行当存在比阵列条目更多行):
在所有的上述实施例,我离开了MaxTextHeight
设置为240
,如果你想在OnRender
事件Window
的运行从文章的代码有两点要注意:
- 设置窗口的
Background
属性Transparent
- 添加一行代码绘制文本后面的白色背景:
// Draw a white background
drawingContext.DrawRectangle(Brushes.White, null, new Rect(new Point(0, 0), new Size(this.Width, this.Height)));
// Draw the formatted text string to the DrawingContext of the control.
drawingContext.DrawText(formattedText, new Point(10, 10));
我才意识到我的答案告诉为什么w始终为空,但不能帮助你获得文本的宽度。为此你可以使用'FormattedText.Width'。对于多行文本,它给出了最长行的长度。如果你想每行的长度,我想你必须单独设置每个行的“文本”属性。另外,如果你设置了'MaxTextWidth','Width'将是该约束内的长度。 – 2010-09-26 10:32:08