Индивидуальный набор символов в XAML - PullRequest
3 голосов
/ 09 декабря 2008

Есть ли способ в XAML добавить отступы вокруг отдельных символов? Желательно до и после персонажа.

У меня есть текстовое поле, в котором я хотел бы, чтобы ввод располагался немного больше (чтобы он совпадал с фоновым изображением). Было бы идеально иметь возможность сделать что-то вроде:

Есть идеи, как этого добиться?

Похоже, что это можно сделать в MS-Word (подробности здесь ), так что, надеюсь, это означает, что это возможно в XAML?

1 Ответ

3 голосов
/ 22 января 2010

Настройка межсимвольного интервала возможна в XAML с помощью класса Glyphs , в частности, свойства Indices . Это довольно низкоуровневый текстовый API, поэтому вы должны указать URI шрифта (а не фамилию), и вам нужно самостоятельно рассчитать все расстояния.

Следующий XAML использует Glyph.Indices для применения межсимвольного интервала:

<Glyphs UnicodeString="Expanded" Indices=",100;,100;,100;,100;,100;,100;,100"
    FontUri="file://c:/windows/fonts/arial.ttf"
    Fill="Black" FontRenderingEmSize="24" />
<Glyphs UnicodeString="Normal"
    FontUri="file://c:/windows/fonts/arial.ttf"
    Fill="Black" FontRenderingEmSize="24" />
<Glyphs UnicodeString="Condensed" Indices=",60;,50;,50;,50;,45;,50;,40;,45"
    FontUri="file://c:/windows/fonts/arial.ttf"
    Fill="Black" FontRenderingEmSize="24" />

Как указано здесь , свойство Indices содержит разделенный точкой с запятой список chr,off пар. chr - индекс глифа внутри шрифта; если опущено, WPF будет использовать глиф, соответствующий текущему символу в UnicodeString. off - интервал между этим глифом и следующим; 0 отображает два поверх друг друга, любое положительное значение увеличивает интервал. «Нормальный» интервал будет зависеть от используемого вами шрифта; как вы можете видеть в примере «Сжатый», я использовал разные интервалы для разных пар символов, чтобы вывод выглядел лучше.

Очевидно, что это относится только к статическому тексту, который вы отображаете, а не к вводу, полученному от пользователя (в TextBox); Я не знаю ни одного способа отрегулировать межсимвольный интервал в «стандартных» текстовых объектах (TextBlock, TextBox, Run и т. Д.), Поэтому, возможно, ответ «Нет, нет способ сделать это в XAML ".

...