2011-07-16 18 views
6

WPF4'te, drawingvisual için 'Size''un FormattedText veya GlyphRun hesaplamasını nasıl yapabilirim?wpf dosyasındaki FormattedText veya GlyphRun'un 'Size' boyutunu nasıl hesaplarsınız?

Bir tuvale resim çizmeyi kullanıyorum. Metin boyutunu veya metnini değiştirdiğimde değişiklikler olur, ancak Gerçek Genişlik ve Yükseklik aynıdır veya güncellenmez. Eğer FormattedText başlatıldı sonra

Using dc As DrawingContext = drawingvisual.RenderOpen      

       Dim ft As New FormattedText(...) 

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

       dc.Close() 

End Using 

cevap

6

, kendi parametreleri verilen gerçek hale boyutuna eşit Genişlik ve Yükseklik üyesi bulunmaktadır. Aslında, parametreleri değiştirmek GlyphRun için gr ,:

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; 

Düzenleme, e, hemen onları günceller: Eğer GlyphRun yarattığı zaman genişlik için ekleyebilirsiniz böylece Zaten her karakter için bunu önceden genişlikleri verdi . yüksekliği elde etmek için, GlyphTypeface.Baseline * FontSize

+0

GlyphRun'dan ne haber? – Code0987

+0

GlyphRun'unuzu oluşturduğunuzda, her karakter için önceden genişliklerini verdiniz, böylece bunları genişlik için eklersiniz. Yüksekliği elde etmek için GlyphTypeface.Baseline * FontSize kullanın. –

+0

Lütfen cevabınızı düzenleyin ve 'GlyphRun' hakkında ekleyin. – Code0987

3

gibi bir yan not kullanın: DrawingContext.DrawFormattedText vs DrawingContext.DrawGlyphRun kullanırken etrafa 10x performans artış fark ettik.

GlyphRun iyi belgelenmemiş, ancak this article'u okuduktan sonra nasıl çalıştığını anlayabilmeniz gerekir.

İlgili konular