我们正在尝试测量显示的文本宽度(而不是字符数)。
在 Winforms 中有一个名为 Grapihcs.MeasureCharacterRanges 的方法。在 WPF 中,FormattedText.WidthIncludingTrailingWhitespace。虽然看起来这些会给出相同的价值,但他们没有。为什么不?对于我们 Graphics.MeasurecharacterRanges,但我们不能真正拉入 winforms,仅用于一种方法。它是一个 WPF 应用程序。
我们正在尝试测量显示的文本宽度(而不是字符数)。
在 Winforms 中有一个名为 Grapihcs.MeasureCharacterRanges 的方法。在 WPF 中,FormattedText.WidthIncludingTrailingWhitespace。虽然看起来这些会给出相同的价值,但他们没有。为什么不?对于我们 Graphics.MeasurecharacterRanges,但我们不能真正拉入 winforms,仅用于一种方法。它是一个 WPF 应用程序。
我们正在使用以下实用程序类在 WPF 中执行简单的文本测量:
public static class TextUtilities
{
public static Size MeasureText(string text,
FontFamily family, double size, FontStyle style, FontWeight weight, FontStretch stretch, TextFormattingMode formattingMode)
{
FormattedText formattedText = new FormattedText(
text,
CultureInfo.CurrentCulture,
FlowDirection.LeftToRight,
new Typeface(family, style, weight, stretch),
size,
Brushes.Black,
null,
formattingMode);
return new Size(formattedText.Width, formattedText.Height);
}
public static Size MeasureText(string text, TextBlock textBlock)
{
return MeasureText(text,
textBlock.FontFamily,
textBlock.FontSize,
textBlock.FontStyle,
textBlock.FontWeight,
textBlock.FontStretch,
TextOptions.GetTextFormattingMode(textBlock));
}
public static Size MeasureText(string text, Control control)
{
return MeasureText(text, control.FontFamily, control.FontSize,
control.FontStyle, control.FontWeight, control.FontStretch,
TextOptions.GetTextFormattingMode(control));
}
}
WPF 对图形元素的大多数测量使用与设备无关的单位,它可能与用于 WinForms 的单位不同。有关FrameworkElements 的 Height 属性和使用的单位,请参阅MSDN 上的此链接。