1

我们正在尝试测量显示的文本宽度(而不是字符数)。

在 Winforms 中有一个名为 Grapihcs.MeasureCharacterRanges 的方法。在 WPF 中,FormattedText.WidthIncludingTrailingWhitespace。虽然看起来这些会给出相同的价值,但他们没有。为什么不?对于我们 Graphics.MeasurecharacterRanges,但我们不能真正拉入 winforms,仅用于一种方法。它是一个 WPF 应用程序。

4

2 回答 2

3

我们正在使用以下实用程序类在 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));
    }
}
于 2013-05-04T19:34:47.257 回答
0

WPF 对图形元素的大多数测量使用与设备无关的单位,它可能与用于 WinForms 的单位不同。有关FrameworkElements 的 Height 属性和使用的单位,请参阅MSDN 上的此链接。

于 2013-05-02T18:39:09.080 回答