How to calculate font height in WPF?

2019-01-13 21:11发布

For a FontFamily how do I programatically retrieve/calculate the maximum height range for that font at a particular FontSize?

I need a value to set the height of a textblock that will display the font at the specified FontSize - this has to be carried out programatically.

I need a value that will take into consideration ascenders and descenders, etc.

Update

To clarify, I need the maximum height range for the entire FontFamily, not the height of some sample text in that font. I do not know what the text will be in advance.

2条回答
走好不送
2楼-- · 2019-01-13 21:58

The maximum height range for a font can be calculated using its LineSpacing property which is a proportional figure for the font. This can be used to give a line height which can accommodate all glyphs for that font at a particular size.

    FontFamily fontFamily = new FontFamily("Segoe UI");
    double fontDpiSize = 16;

    double fontHeight = Math.Ceiling(fontDpiSize * fontFamily.LineSpacing);

Result:

   22.0

This figure will contain a small amount of leading which is desirable when needing a height for rows of text (so that ascenders and descenders from adjacent rows of text have spacing).

enter image description here

查看更多
聊天终结者
3楼-- · 2019-01-13 22:12

Use System.Windows.Media.FormattedText class.

Example:

FormattedText ft = new FormattedText("Quick Brown Fox Jumps Over A Lazy Dog.",
                                     CultureInfo.CurrentCulture,
                                     CultureInfo.CurrentCulture.TextInfo.IsRightToLeft ? FlowDirection.RightToLeft : FlowDirection.LeftToRight,
                                     new Typeface("Verdana"),
                                     9,
                                     new SolidColorBrush(Colors.White)
Double maxHeight = ft.MaxTextHeight;
查看更多
登录 后发表回答