1

表示されているテキストの幅を測定しようとしています (文字数ではありません)。

Winforms には、Grapihcs.MeasureCharacterRanges というメソッドがあります。WPF では、FormattedText.WidthInclusiveTrailingWhitespace. これらは同じ値を与えるように見えますが、そうではありません。なぜだめですか?私たちにとってはGraphics.MeasurecharacterRangesですが、1つのメソッドだけでwinformを実際に引き出すことはできません。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 に答える