如何在 WPF 中列出等宽(固定宽度)字体

Posted

技术标签:

【中文标题】如何在 WPF 中列出等宽(固定宽度)字体【英文标题】:How to list monospace (fixed-width) fonts in WPF 【发布时间】:2011-02-03 09:15:30 【问题描述】:

我需要将字体选择器添加到我的 WPF 文本编辑器中。我正在适应this font chooser。

但是,它会列出所有已安装的字体。我只需要一个固定宽度(等宽)字体的列表。

如何检查给定的 System.Windows.Media.FontFamily 是否为固定宽度字体?

有一个解决方案that uses System.Drawing.FontFamily,但这些字体与 WPF 不完全兼容,我正在调整的代码使用 System.Windows.Media.FontFamily。

【问题讨论】:

【参考方案1】:

也许您可以通过创建具有相同名称的 System.Drawing.Font 并从那里使用 inteop 和 LOGFONT 来过滤 System.Windows.Media.FontFamily 列表。

这是一个可怕的 hack,但我相信它在大多数情况下都可以工作(如果您只使用系统上安装的字体,System.Windows.Media.FontFamily 和 System.Drawing.FontFamily 列表应该大部分匹配)

由于 WPF 和 GDI 之间字体渲染器的差异,使用类似这样的东西来获取字体大小信息或有关高级字体属性的信息将完全没用 - 但对于字体的基本属性,如固定宽度,我希望这样应该可以。

【讨论】:

是的,我正在考虑获取一个固定宽度字体的名称列表作为过滤器,无论是您建议的方式还是直接向 EnumFonts() 调用的方式,但我希望有一个不那么老套的方式。

以上是关于如何在 WPF 中列出等宽(固定宽度)字体的主要内容,如果未能解决你的问题,请参考以下文章

如何在具有保留字符宽度的 HTML 中使用等宽字体显示特殊的 unicode 字符

如何设置 <div> 的宽度以适应等宽字体中的常量字母数?

如何设置 <div> 的宽度以适应等宽字体中的常量字母数?

SVG、文本、固定宽度/高度的字体

如何在 Android 文本视图中设置字体宽度?

IDEA编辑器中的字符宽度不同