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始终为空。你知道为什么吗?

+1

我才意识到我的答案告诉为什么w始终为空,但不能帮助你获得文本的宽度。为此你可以使用'FormattedText.Width'。对于多行文本,它给出了最长行的长度。如果你想每行的长度,我想你必须单独设置每个行的“文本”属性。另外,如果你设置了'MaxTextWidth','Width'将是该约束内的长度。 – 2010-09-26 10:32:08

FormattedTextClass不会告诉你最大线宽是多少。它反过来工作;你可以告诉它最大的宽度,它会指出如何显示文本。

这MSDN文章提供了更多信息:Drawing Formatted Text

以示例代码和重写OnRender事件的一个窗口,这里是一行文字看起来当没有约束被放置在宽度,如:

alt text

MaxTextWidth被设定为300:

alt text

并且当SetMaxTextWidths被称为传递的{ 200, 500, 100 }双阵列(最后宽度被用于所有剩余的行当存在比阵列条目更多行):

alt text

在所有的上述实施例,我离开了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));