在 WPF 字体大小和“标准”字体大小之间转换

Posted

技术标签:

【中文标题】在 WPF 字体大小和“标准”字体大小之间转换【英文标题】:Converting between WPF font size and "standard" font size 【发布时间】:2011-03-27 12:58:20 【问题描述】:

我注意到在 WPF 中,12 磅的默认字体大小大致相当于“普通”应用程序(例如写字板)中的 9 磅,WPF 中的 10 pt 大约是 7 pt 标准,当我尝试匹配WPF 中写字板的默认字体大小为 10 pt,我发现 13 是最接近的。

首先,WPF为什么要使用这么离奇的非标准字体大小,其次,有没有可靠的方法在两者之间进行转换?

我问的原因是我想构建一个“标准”字体大小为 9、10、12、14、16、18、24、36、48 的字体大小菜单,但我很确定我是否使用那些实际值,他们将疯狂地关闭。

【问题讨论】:

【参考方案1】:

如果您要从点转换为 WPF 双精度,另一种转换方法是使用 System.Windows.FontSizeConverter 类:

double sizeForWpf = (double) new FontSizeConverter().ConvertFrom("10pt");

【讨论】:

【参考方案2】:

WPF 使用像素作为font size 的默认单位。 points(可能是你说“标准”字体大小的意思)和像素之间的映射是:1 pt = (96/72) px

这给了我们一个简单的转换函数:

public static double PointsToPixels(double points)

    return points*(96.0/72.0);

更多详情请见this question。

【讨论】:

谢谢!这似乎是缺少的关键。我还看到我可以使用“合格的双精度”指定字体大小并将点指定为单位,但是我想知道如何从代码中做到这一点。 值得指出的是,WPF 文档将这些 1/96 英寸像素称为“em 单位”,这与“em”的印刷含义完全不同(与 @987654324 一起使用@) 我很想知道 Windows DPI 是否重要,所以我深入研究了 .Net 参考源,但事实并非如此。 FontSizeConverter 使用 LengthConverter 将字符串从字符串转换为双精度,并且具有以下数组: static private double[] PixelUnitFactors = 1.0, // 像素本身 96.0, // 每英寸像素 96.0 / 2.54, // 每厘米像素96.0 / 72.0, // 每点像素数 ;

以上是关于在 WPF 字体大小和“标准”字体大小之间转换的主要内容,如果未能解决你的问题,请参考以下文章

WPF如何改变GridView字体大小

XP系统下WPF程序字体大小不一的问题

如何计算已知字体大小和字符的 WPF TextBlock 宽度?

如何在 WPF C# 中更改验证结果的字体大小

为啥在 Chrome 中转换字体大小如此不稳定?

WPF TextBlock 字体调整大小以填充网格中的可用空间