Почему следующий код не генерирует исключение?
FontFamily font = new FontFamily("bla bla bla");
Мне нужно знать, существует ли конкретный font
(как комбинация FontFamily, FontStyle, FontWeight,...) в моей текущей ОС. Что мне делать?
Почему следующий код не генерирует исключение?
FontFamily font = new FontFamily("bla bla bla");
Мне нужно знать, существует ли конкретный font
(как комбинация FontFamily, FontStyle, FontWeight,...) в моей текущей ОС. Что мне делать?
Это по дизайну. Программы часто запрашивают шрифты, которых нет на машине, особенно в стране, удаленной от места жительства программиста. Преобразователь шрифтов создает альтернативу. Замена шрифта вообще очень распространена. Вы смотрите на Arial прямо сейчас, если вы работаете на компьютере с Windows. Но я могу вставить 你好世界 в этот пост, и вы увидите, что он отображается точно, хотя в Arial нет глифов для китайских иероглифов.
Итак, совет номер один: не беспокойтесь о том, какие шрифты доступны. API-интерфейс Windows имеет EnumFontFamiliesEx() для перечисления доступных семейств шрифтов. Но это не раскрывается в WPF, есть некоторые трения с OpenType, стандартом шрифта, который довольно плохо интегрирован с Windows. Кажется, еще одна тень, когда Adobe вмешивается во все, что делает Microsoft.
Некоторая путаница в комментариях о классе Winforms FontFamily. Что на самом деле можно использовать в этом случае, его метод GetFamilies() возвращает массив доступных семейств. Но только TrueType, а не OpenType шрифты.
Вы можете использовать класс System.Drawing.Text.InstalledFontCollection
http://msdn.microsoft.com/en-us/library/system.drawing.text.installedfontcollection.aspx
WPF имеет метод, специфичный для фреймворка Fonts.SystemFontFamilies
http://msdn.microsoft.com/en-us/library/system.windows.media.fonts.systemfontfamilies.aspx
Чтобы ответить на вопрос, почему он не генерирует исключение, в соответствии с FontFamily Constructor в MSDN исключение не добавлялось до версии фреймворка 3.5.
Я подозреваю, что вы ориентируетесь на версию 3.0 или ниже.
Ваше здоровье!
System.Drawing.FontFamily
. Конструктор System.Windows.Media.FontFamily
никогда не генерирует исключений, если аргумент не равен null.
- person BoltClock; 09.10.2012
Вы можете просмотреть доступные шрифты в Системе, используя коллекцию Fonts.SystemFontFamilies — используйте некоторый Linq для соответствия любым условиям, которые вам нужны;
// true
bool exists = (from f in Fonts.SystemFontFamilies where f.Source.Equals("Arial") select f).Any();
// false
exists = (from f in Fonts.SystemFontFamilies where f.Source.Equals("blahblah") select f).Any();
System.Drawing.FontFamily
, который не является частью WPF. - person BoltClock   schedule 09.10.2012