开发者

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 drawingvisu开发者_如何学Goal 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


Just as a side note: I've notice around 10x performance increase when using DrawingContext.DrawGlyphRun vs DrawingContext.DrawFormattedText.

GlyphRun is not well-documented, but once you read this article you should be able to understand how it works.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜