Есть ли способ в XAML добавить отступы вокруг отдельных символов? Желательно до и после персонажа.
У меня есть текстовое поле, в котором я бы хотел, чтобы ввод был немного разнесен (чтобы он совпадал с фоновым изображением). Было бы идеально иметь возможность делать что-то вроде:
Есть идеи, как это сделать?
Похоже, это можно сделать в MS-Word (подробности здесь), так что, надеюсь, это означает, что это возможно в XAML?





Регулировка межсимвольного интервала в XAML возможна с помощью класса Глифы, в частности свойства Индексы. Это довольно низкоуровневый текстовый 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 ".