Типография в целом и шрифты, в частности, являются довольно сложной темой, на которой я действительно не вхожу. Это говорит вот что я понял из Typography in Windows Presentation Foundation и связанных с MSDN документации:
- Текст визуализируется с помощью конвейера рендеринга текста (см ссылку выше для диаграммы).
- WPF облегчает OpenType как расширение формата шрифта TrueType.
- Объект
Typography
предоставляет множество дополнительных возможностей шрифтов OpenType.
- Важной концепцией рендеринга нижнего уровня является элемент
Glyphs
, см. MSDN introduction.
Если вы посмотрите на указанную диаграмму конвейерной рендеринга, вы заметите, что в то время как глифы являются строительными блоками, они могут быть различными способами (отфильтрованы/преобразованы/...), прежде чем, наконец, конкретная среда, например экран или принтер; один пример будет применять ClearType для ЖК-экранов. Однако, как правило, с концепциями конвейерной обработки, эти преобразования являются более рудными, менее необязательными в целом.
Теперь, в зависимости от ваших требований приложения, это может уже дать решение. Если вы на самом деле не нужны TextBox вы можете также просто использовать глифы в себе так:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<Grid>
<TextBox Text="TextBox: 1234567890" FontFamily="Scramble" FontSize="12" />
<Glyphs UnicodeString="Glyphs: 1234567890" FontUri="C:\WINDOWS\Fonts\Scramble.TTF"
FontRenderingEmSize="12" Fill="Black" OriginX="5" OriginY="32"/>
</Grid>
</Page>
глифы элемента рендеринг пустых плиток для чисел, как требуется в то время как элемент TextBox не делает. Обратите внимание, что из-за того, что Glyphs является элементом низкого уровня, применяются несколько ограничений, особенно FontUri/Fill/FontRenderingEmSize, т. Е. Не существует значений по умолчанию, подобных связанным свойствам TextBox.
Учитывая это, вернемся к исходному вопросу: Я бы не подумал об этой проблеме как о ограничении WPF (или даже об ошибке), а о влиянии на требования к визуализации текста и значения по умолчанию, применяемые в контекст компоновки пользовательского интерфейса WPF. Например. составной (то есть не низкий уровень) TextBox
элемент управления применяет форматирование текста и настройки типографии к его содержимому (глифы), облегчая различные таблицы отображения символов, встроенные в шрифты (есть потенциально lots из них ...); специальные/упрощенные шрифты, такие как Scramble, могут просто не предоставлять достаточную или правильную информацию здесь, следовательно, механизм рендеринга WPF может быть вынужден применить исправление шрифта как outlined by GalacticCowboy.
Если это действительно так, возможно, можно каким-либо образом переопределить алгоритм рендеринга по умолчанию WPF (см. Класс TextFormatter
, текстовый движок WPF), но, вероятно, нужно было бы глубоко углубиться в структуру, чтобы выяснить, что происходит в пределах TextBox
. Вероятно, гораздо проще «отлаживать» в конечном итоге отсутствующие или неправильные сопоставления символов внутри шрифта Scramble. Это было бы совсем другим делом, хотя ...
О, давай. У кого-то есть лучший ответ, чем этот ... Я бы смутился, чтобы получить щедрость за копирование/вставку из MSDN, которая даже не отвечает на вопрос ...: \ – GalacticCowboy