2013-01-18 37 views

回答

4

您需要使用DirectWrite。有一個片段在這裏做到這一點:

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

複製粘貼&:

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; 
     } 
    } 
} 
+0

Thankyou是不是有一種原生的方式來做到這一點? – Yohannes

+2

DirectWrite是原生的方式! :)我的意思是如果你想要混合語言,你可以跳過SharpDX並從C++中調用它,但是不,在WinRT中似乎沒有一種非DirectWrite方法。 –