Search code examples
wpfformattingglyph

how to calculate 'Size' of FormattedText or GlyphRun in wpf?


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

Solution

  • 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