In WPF4, how can i calculate the 'Size'
of FormattedText
or GlyphRun
for a drawingvisual
.
I'm using drawingvisual in a canvas. When i change text size or text, changes occur but Actual Width and Height are same or don't get updated.
Using dc As DrawingContext = drawingvisual.RenderOpen
Dim ft As New FormattedText(...)
dc.DrawText(ft, New Point(0, 0))
dc.Close()
End Using
Once you've initialized the FormattedText, it has Width and Height members that are equal to its actual rendered size given its parameters. In fact, changing parameters updates them immediately, 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;
Edit for GlyphRun: When you created your GlyphRun you already gave it the advance widths for each character, so you add those for the width. To get the height, use the GlyphTypeface.Baseline * FontSize