6

WPF4では、'Size'FormattedTextまたはのGlyphRunをどのように計算できますかdrawingvisual

キャンバスでdrawingvisualを使用しています。テキストサイズまたはテキストを変更すると、変更は発生しますが、実際の幅と高さが同じであるか、更新されません。

Using dc As DrawingContext = drawingvisual.RenderOpen                    

                Dim ft As New FormattedText(...)

                dc.DrawText(ft, New Point(0, 0))

                dc.Close()

End Using
4

2 に答える 2

6

FormattedText を初期化すると、指定されたパラメーターで実際にレンダリングされるサイズに等しい Width メンバーと Height メンバーが含まれます。実際、パラメータを変更すると、次のようにすぐに更新されます。

FormattedText ft = new FormattedText(cellString, CultureInfo.CurrentCulture, FlowDirection.LeftToRight, fontFace, fontSize, fontBrush);
ft.Trimming = TextTrimming.CharacterEllipsis;
double originalHeight = ft.Height;
double width = ft.Width;
ft.MaxTextWidth = bCellRect.Width;    // Set the width to get a new height
double height = ft.Height;

GlyphRun の編集: GlyphRun を作成したときに、各文字の事前幅が既に指定されているため、それらを幅に追加します。高さを取得するには、GlyphTypeface.Baseline * FontSize を使用します。

于 2011-07-19T18:49:46.023 に答える
4

補足として: DrawingContext.DrawGlyphRun と DrawingContext.DrawFormattedText を使用すると、パフォーマンスが約 10 倍向上することに気付きました。

GlyphRun は十分に文書化されていませんが、この記事を読めば、その仕組みを理解できるはずです。

于 2013-03-31T04:35:48.923 に答える