Вопрос

Есть ли в 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 это невозможно сделать».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top