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.
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).
Use System.Windows.Media.FormattedText
class.
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;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With