如何使用 c# 在 windows 8 metro/store 应用程序中使用可用字体列表填充组合框?

How to fill combobox with list of available fonts in windows 8 metro/store app using c#?

我正在 Visual Studio 2013 中为 Windows 8(通用应用程序)构建一个简单的应用程序,我想使用组合框的选定字体更改文本框的字体系列。

我知道如何在 windows 表单应用程序中使用可用字体填充组合框,例如:

    List<string> fonts = new List<string>();

    foreach (FontFamily font in System.Drawing.FontFamily.Families)
    {
        fonts.Add(font.Name);
    }

但这在 metro/store 应用程序中不起作用...请帮帮我

您需要使用 DirectX DirectWrite 来获取字体名称。这是一个代码示例:

 using SharpDX.DirectWrite;
 using System.Collections.Generic;
 using System.Linq;

 namespace WebberCross.Helpers
 {
     public class FontHelper
     {
         public static IEnumerable<string> GetFontNames()
         {
             var fonts = new List<string>();

             // DirectWrite factory
             var factory = new Factory();

             // Get font collections
             var fc = factory.GetSystemFontCollection(false);

             for (int i = 0; i < fc.FontFamilyCount; i++)
             {
                 // Get font family and add first name
                 var ff = fc.GetFontFamily(i);

                 var name = ff.FamilyNames.GetString(0);
                 fonts.Add(name);
             }

             // Always dispose DirectX objects
             factory.Dispose();

             return fonts.OrderBy(f => f);
         }
     }
 }

代码使用 SharpDX 库。