在Windows 10通用应用程序中列出已安装的字体名称

5
我正在使用C#构建一个Windows 10通用应用程序,需要列出系统上安装的字体名称。该应用程序是一个metro/modern ui/windows 8.1应用程序,我在那里使用了SharpDX 'trick'来获取名称。
由于SharpDX尚不可用于Windows 10 UAP,因此这种方法不再有效。
还有其他实现目标的方法吗?我是否应该考虑使用此处推荐的固定字体名称列表?例如,在桌面上似乎相当受限制。
先行致谢!

1
请注意,SharpDX 3.0.0-beta+ 可兼容 Windows 10 UAP。 - xoofx
谢谢xoofx,知道了! - Raf
2个回答

9
相同的基本思路:您仍然将使用DirectWrite获取字体名称。
您可以在Windows 8.1和通用Windows平台应用程序中使用Win2D从C#访问DirectWrite。CanvasTextFormat.GetSystemFontFamilies将返回字体系列。
string[] fonts = Microsoft.Graphics.Canvas.Text.CanvasTextFormat.GetSystemFontFamilies();
foreach (string font in fonts)
{
    Debug.WriteLine(string.Format("Font: {0}", font));
}

太棒了!我在Windows 8.1中尝试使用SharpDX对字体进行枚举,它运行良好,但由于dll中的弃用API - D2D1GetGradientMeshInteriorPointsFromCoonsPatch,在认证(WACK)时失败了。 - x2.

2
我决定采用固定列表方法。它不需要Win2D。
如果有人感兴趣,这是一份在支持UWP应用程序的所有Windows 10版本中保证可用的字体列表:
https://msdn.microsoft.com/en-us/library/windows/apps/hh700394.aspx解析而来。
public static string[] FontNames = {
    "Arial", "Calibri", "Cambria", "Cambria Math", "Comic Sans MS", "Courier New",
    "Ebrima", "Gadugi", "Georgia",
    "Javanese Text Regular Fallback font for Javanese script", "Leelawadee UI",
    "Lucida Console", "Malgun Gothic", "Microsoft Himalaya", "Microsoft JhengHei",
    "Microsoft JhengHei UI", "Microsoft New Tai Lue", "Microsoft PhagsPa",
    "Microsoft Tai Le", "Microsoft YaHei", "Microsoft YaHei UI",
    "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text",
    "Nirmala UI", "Segoe MDL2 Assets", "Segoe Print", "Segoe UI", "Segoe UI Emoji",
    "Segoe UI Historic", "Segoe UI Symbol", "SimSun", "Times New Roman",
    "Trebuchet MS", "Verdana", "Webdings", "Wingdings", "Yu Gothic",
    "Yu Gothic UI"
};

特别是对于我的应用程序,我从此列表中删除了一些不感兴趣的内容,例如 Javanese Text Regular Fallback font for Javanese script 以及那些 Microsoft * 亚洲语言和 Segoe MDL2 Assets 以及 (Web|Wing)dings,这些仅用于图标。

1
类似页面的更新版本:https://learn.microsoft.com/zh-cn/typography/fonts/windows_10_font_list。 - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接