在Windows 10 Universal App

时间:2015-11-06 21:25:22

标签: c# fonts windows-10 win-universal-app sharpdx

我正在C#中构建一个Windows 10通用应用程序,它必须列出系统上已安装字体的名称。该应用程序是一个地铁/现代ui / windows 8.1应用程序,我使用the SharpDX 'trick'来获取名称。

对于Windows 10 UAP,SharpDX不可用(但是?),因此不再适用。

实现目标的其他任何方式?我是否应该在推荐字体下考虑here所述的固定字体名称列表?例如,当在桌面上时,这似乎是相当有限的。

提前致谢!

2 个答案:

答案 0 :(得分:6)

基本相同的想法:你仍然会使用DirectWrite来获取字体名称。

您可以使用Win2D在Windows 8.1和通用Windows平台应用中从C#获取DirectWrite。 CanvasTextFormat。GetSystemFontFamilies将返回字体系列:

string[] fonts = Microsoft.Graphics.Canvas.Text.CanvasTextFormat.GetSystemFontFamilies();
foreach (string font in fonts)
{
    Debug.WriteLine(string.Format("Font: {0}", font));
}

答案 1 :(得分:0)

我决定使用固定列表方法。它不需要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仅适用于图标。