2011-07-16 8 views
6

W WPF4, jak mogę obliczyć 'Size' z FormattedText lub GlyphRun dla drawingvisual.jak obliczyć "Rozmiar" FormattedText lub GlyphRun w WPF?

Korzystam z rysunku na płótnie. Kiedy zmieniam rozmiar tekstu lub tekst, pojawiają się zmiany, ale rzeczywista szerokość i wysokość są takie same lub nie są aktualizowane.

Using dc As DrawingContext = drawingvisual.RenderOpen      

       Dim ft As New FormattedText(...) 

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

       dc.Close() 

End Using 

Odpowiedz

6

Po zainicjowaniu sformatowanego tekstu tekstowego, jego elementy szerokości i wysokości są równe rzeczywistemu rozmiarowi renderowania, biorąc pod uwagę jego parametry. W rzeczywistości, zmiany parametrów aktualizuje je natychmiast, 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; 

Edycja dla GlyphRun: Po utworzeniu GlyphRun już dał jej szerokości zaliczki dla każdego znaku, więc trzeba dodać tych, dla szerokości . Aby uzyskać wysokość, należy użyć GlyphTypeface.Baseline * FontSize

+0

Co z 'GlyphRun'? – Code0987

+0

Po utworzeniu GlyphRun już wcześniej nadałeś szerokość każdej postaci, więc dodaj te do szerokości. Aby uzyskać wysokość, użyj GlyphTypeface.Baseline * FontSize. –

+0

Edytuj swoją odpowiedź i dodaj do niej "GlyphRun". – Code0987

3

Tak jak na marginesie: zauważyłem około 10-krotny wzrost wydajności podczas korzystania z DrawingContext.DrawGlyphRun vs DrawingContext.DrawFormattedText.

GlyphRun nie jest dobrze udokumentowany, ale po przeczytaniu this article powinieneś być w stanie zrozumieć, jak to działa.

Powiązane problemy