Как указать интервал букв или кернинг в текстовом поле WPF?
Я хотел бы изменить интервал между символами в текстовом поле WPF.
Что-то вроде letter-spacing: 5px
, которое доступно в CSS.
Я думаю, что это возможно в XAML; какой самый простой способ?
Я нашел документ Введение в объект GlyphRun Object и Glyphs Element и нашел его чрезвычайно бесполезным.
Это пример кода с этой страницы:
<!-- "Hello World!" with explicit character widths for proportional font -->
<Glyphs
FontUri = "C:\WINDOWS\Fonts\ARIAL.TTF"
FontRenderingEmSize = "36"
UnicodeString = "Hello World!"
Indices = ",80;,80;,80;,80;,80;,80;,80;,80;,80;,80;,80"
Fill = "Maroon"
OriginX = "50"
OriginY = "225"
/>
На той же странице документации это "объяснение" для свойства Indices
:
![enter image description here]()
Я понятия не имею, что это значит. Я также не уверен, что индексы правильные - комментарий в коде говорит о "ширине символов", который мне неинтересен. Я хочу настроить ширину между символами.
Кроме того, нет примера, как применить элемент Glyphs
к TextBox. Когда я попробовал, мое тестовое приложение WPF просто разбилось.
Что я хочу сделать, это немного увеличить пустое пространство, которое появляется между рисунками в текстовом поле WPF TextBox. Текст будет отличаться по длине и контенту. Нужно ли изменять свойство Indicies
каждый раз, когда появляется новый символ? Есть ли способ сказать "сделать это на 20% больше места, чем обычно, для каждого персонажа".
Может кто-нибудь мне помочь?
Ответы
Ответ 1
Я пробовал Glyphs и FontStretch и не мог легко получить результат, который я искал. Я смог придумать подход, который работает для моих целей. Возможно, это сработает и для других.
<ItemsControl ItemsSource="{Binding SomeString}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"
Margin="0,0,5,0"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Я могу привязываться к любой строке и не нужно делать какое-либо распознавание ширины символов, чтобы правильно установить интервал. Правильный край - это пробел между буквами.
Пример:
![Kerning]()
Ответ 2
FontStretch вариант для вас?
В противном случае вы можете посмотреть это, есть изображение, показывающее, что означает предварительная ширина. Хотя я еще не делал этого раньше и не знаю, будет ли это работать увеличение правого и левого боковых подшипников, возможно, это то, что вы хотите!
Ответ 3
За что его стоит.,.
Если у вас есть возможность переключить свою реализацию на RichTextBox, это может быть проще, чем обход, который вы обнаружили в сентябре 2013 года. Я просто попробовал это для своих нужд, и он работает для того, что мне нужно. Я не вижу пути с RichTextBox для контроля кернинга отдельных пространств, таких как наборщики. Но TextBox ест дополнительные пространства (объединение нескольких смежных пространств в одно пространство), как HTML. Мне нужно, чтобы пробелы отображали такое же количество интервалов, что и в моем тексте String, и RichTextBox делает это.
<RichTextBox x:Name="MyRichTextBox"></RichTextBox>
Я не эксперт, но, похоже, вы не можете указать текстовое содержимое в XAML. Я должен был указать его в событии с кодом:
this.MyRichTextBox.AppendText("V A R I E D S P A C E S");