在WINRT中使用c#加载可用字体列表

本文关键字:字体 列表 加载 WINRT | 更新日期: 2023-09-27 17:54:11

我想使用c#将可用字体列表加载到winrt应用程序的组合框中。在。net中这是一个简单的任务,但我在winrt中找不到相应的API。我该怎么做呢?

在WINRT中使用c#加载可用字体列表

你需要使用DirectWrite。这里有一个代码片段:

https://github.com/christophwille/winrt-snippets/tree/master/EnumerateFonts

Copy&粘贴:

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using SharpDX.DirectWrite;
namespace EnumerateFonts
{
    public class InstalledFont
    {
        public string Name { get; set; }
        // Code taken straight from SharpDX'Samples'DirectWrite'FontEnumeration'Program.cs
        public static List<InstalledFont> GetFonts()
        {
            var fontList = new List<InstalledFont>();
            var factory = new Factory();
            var fontCollection = factory.GetSystemFontCollection(false);
            var familyCount = fontCollection.FontFamilyCount;
            for (int i = 0; i < familyCount; i++)
            {
                var fontFamily = fontCollection.GetFontFamily(i);
                var familyNames = fontFamily.FamilyNames;
                int index;
                if (!familyNames.FindLocaleName(CultureInfo.CurrentCulture.Name, out index))
                    familyNames.FindLocaleName("en-us", out index);
                string name = familyNames.GetString(index);
                fontList.Add(new InstalledFont()
                                 {
                                     Name = name,
                                 });
            }
            return fontList;
        }
    }
}

还有一种方法可以枚举没有SharpDX的字体。https://code.msdn.microsoft.com/FontExplorer-lets-you-f01d415e内容