2016-07-20 2 views
1

У меня есть приложение WPF для рабочего стола, которое позволяет пользователю настраивать шрифты.Определить формат файла шрифта в WPF (C#)

После исследования производительности рендеринга я обнаружил, что шрифты OpenType заметно быстрее, чем шрифты TrueType. Я хочу отфильтровать шрифты TrueType из диалогового окна настроек, поэтому пользователь может выбирать только шрифты OpenType. Но я не могу найти, как определить формат шрифта в WPF.

Я посмотрел в Fonts.SystemFontFamilies и Fonts.SystemTypefaces и не может найти соответствующие свойства.

ответ

0

Я не верю, что Windows поставляется с любыми шрифтами OpenType, поэтому, если вы их не установили самостоятельно, Fonts.SystemFontFamilies не будет содержать.

Тем не менее, вы можете попробовать фильтрации списка путем извлечения имени файла шрифта:

GlyphTypeface glyph; 
var fonts = Fonts.SystemFontFamilies.Where(f => f.GetTypefaces().Any(t => 
    t.TryGetGlyphTypeface(out glyph) && 
    glyph.FontUri.ToString().EndsWith("otf", StringComparison.OrdinalIgnoreCase))); 

Другой способ заключается в использовании частного FontTechnology proeprty:

GlyphTypeface glyph; 
var FontTechnologyProperty = typeof(GlyphTypeface).GetProperty("FontTechnology", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); 
var OpenType = Enum.Parse(FontTechnologyProperty.PropertyType, "PostscriptOpenType"); 
var fonts = Fonts.SystemFontFamilies.Where(f => f.GetTypefaces().Any(t => 
    t.TryGetGlyphTypeface(out glyph) && 
    Object.Equals(FontTechnologyProperty.GetValue(glyph), OpenType))); 
+0

Hm. Я вижу, что Arial - это OpenType. Segoe UI тоже. Кажется, в моей установке Windows 7SP1 есть много шрифтов OpenType. –

+0

О, я на Windows 10. Нет OpenType здесь, насколько я могу видеть. –

+0

PS У упомянутых шрифтов есть расширение .ttf. Системный просмотрщик шрифтов говорит, что у них есть формат OpenType ... –

Смежные вопросы