2011-07-16 48 views
6

WPF4では、drawingvisualの場合、をFormattedTextまたはGlyphRunと計算するにはどうすればよいですか。wpfでFormattedTextまたはGlyphRunの 'Size'を計算する方法は?

私はキャンバスで描画ビジュアルを使用しています。テキストサイズやテキストを変更すると、変更が行われますが、実際の幅と高さは同じか、更新されません。

Using dc As DrawingContext = drawingvisual.RenderOpen      

       Dim ft As New FormattedText(...) 

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

       dc.Close() 

End Using 

答えて

6

FormattedTextを初期化すると、そのパラメータで与えられた実際のレンダリングサイズに等しい幅と高さのメンバーがあります。 GlyphRunのため実際には、パラメータを変更すると、すぐにそれらを更新し、E、G ,:

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を作成したとき。高さを取得するには、GlyphTypeface.Baseline * FontSizeを使用してください。

+0

「GlyphRun」についてはどうですか? – Code0987

+0

GlyphRunを作成したときに、すでに各文字の前進幅が与えられているので、その幅の文字を追加します。高さを取得するには、GlyphTypeface.Baseline * FontSizeを使用します。 –

+0

あなたの答えを編集し、 'GlyphRun'を追加してください。 – Code0987

3

ちょっとしたメモ:私はDrawingContext.DrawGlyphRunとDrawingContext.DrawFormattedTextの使用時に約10倍のパフォーマンス向上を見ました。

GlyphRunはよく文書化されていませんが、this articleを読むと、その動作を理解できるはずです。

関連する問題