Откуда WPF FontFamily.Source получает свое значение? - PullRequest
0 голосов
/ 01 сентября 2010

У меня есть два приложения, которые используют одни и те же данные для создания пользовательского интерфейса, одно использует WPF, а другое - GDI. Я использую шрифт Myriad Condensed Web в соответствии с атрибутом имени шрифта в Windows. У меня нет проблем с созданием экземпляра объекта System.Drawing.FontFamily с использованием заданного имени шрифта. Однако, когда я создаю этот шрифт, используя WPF System.Windows.Media.FontFamily, я могу сделать это только с именем Myriad Web. Я не могу найти ссылку на это значение в свойствах шрифта в панели управления шрифтами Window. Когда я проверяю System.Windows.Media.Fonts.SystemFontFamilies, Myriad Web является значением атрибута Source.

Итак, мой вопрос: откуда WPF получает это значение? И почему это отличается от значения, которое дает GDI? И как я могу создать один и тот же шрифт для GDI и WPF, используя одно имя шрифта? Я хочу избежать хранения двух значений - одного для GDI и одного для WPF.

Ответы [ 2 ]

1 голос
/ 02 августа 2012

Я нашел это сообщение в блоге http://blogs.msdn.com/b/text/archive/2009/04/15/introducing-the-directwrite-font-system.aspx Кажется, что метод преобразования фамилии может быть способом сделать это правильно.

1 голос
/ 01 сентября 2010

Я не уверен на 100% в том, что происходит, но у меня есть хорошая теория. Технология шрифтов значительно продвинулась со времен GDI +, возможно, в результате включения поддержки OpenType. В WPF есть понятие FontStretch, класс FontStretches определяет такие значения, как «Согласен», «Средний», «Расширенный» и т. Д.

Это свойство недоступно в устаревшем коде, я думаю, что диспетчер шрифтов Windows синтезирует имена семейств шрифтов для обеспечения совместимости. Вводя «Сгущенный» (и т. Д.) В обычную фамилию. Итак, мысленно удалите это прилагательное, чтобы получить имя WPF. Конечно, это разрушит ваш план, если только вы сами не захотите отфильтровать его в коде.

...