WPF中如何计算字体高度?

发布于 2024-10-09 06:00:17 字数 286 浏览 5 评论 0原文

对于 FontFamily,如何以编程方式检索/计算该字体在特定 FontSize 下的最大高度范围?

我需要一个值来设置文本块的高度,该文本块将以指定的 FontSize 显示字体 - 这必须以编程方式执行。

我需要一个考虑上升部分和下降部分等的值。

更新

为了澄清,我需要整个 FontFamily 的最大高度范围,而不是某些样本的高度该字体的文本。我事先不知道文本会是什么。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

归属感 2024-10-16 06:00:17

字体的最大高度范围可以使用其 LineSpacing 属性,它是字体的比例数字。这可用于给出可以容纳特定大小的该字体的所有字形的行高。

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

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

结果:

<前><代码> 22.0

该数字将包含少量的前导,当需要文本行的高度时,这是理想的(以便相邻文本行的上升部分和下降部分有间距)。

输入图像此处描述

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

甜心小果奶 2024-10-16 06:00:17

使用 System.Windows.Media.FormattedText 类。

例子:

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;

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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文