Как я могу указать расстояние между буквами или кернинг в текстовом поле WPF?

StackOverflow https://stackoverflow.com/questions/5843562

  •  27-10-2019
  •  | 
  •  

Вопрос

Я хотел бы изменить расстояние между символами в текстовом поле WPF.
Что -то вроде letter-spacing: 5px вещь, которая доступна в CSS.
Я думаю, что это возможно в XAML; Что самый простой?

Я нашел "Введение в объект глифрун и элемент глифы"Документ, и обнаружил, что он чрезвычайно бесполезен.

Это пример кода с этой страницы:

<!-- "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 элемент в текстовый поле. Когда я попробовал это, мое тестовое приложение WPF только что разбилось.


Я хочу немного увеличить пустое пространство, которое появляется между нарисованными символами в текстовом поле WPF. Текст будет варьироваться по длине и содержанию. Должен ли я изменить Indicies Собственность каждый раз, когда есть новый персонаж? Есть ли способ сказать: «Сделайте это на 20% больше места, чем обычно, для каждого персонажа».

Кто-нибудь может мне помочь?

Это было полезно?

Решение

Я попробовал 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

Другие советы

является FontStretch Вариант для вас?

В противном случае вы можете захотеть заглянуть в это Есть изображение, показывающее, что означает продвижение ширины. Хотя я не делал этого раньше и не знаю, работает ли это, увеличение правого и левого подшипника может быть тем, что вы хотите!

За что это стоит. Анкет Анкет

Если у вас есть возможность переключить вашу реализацию на RichTextBox, это может быть проще, чем обходная работа, которую вы нашли в сентябре 2013 года. Я просто попробовал ее для своих собственных потребностей, и это работает для того, что мне нужно. Я не вижу способа с RichTextbox для управления керном отдельных пространств, которые делают наборы. Но Textbox ела дополнительные пространства (консолидация нескольких соседних пространств в одно пространство), таких как HTML. Мне нужно было, чтобы пространства отображали то же количество расстояния, что и в моей текстовой строке, и Richtextbox делает это.

<RichTextBox x:Name="MyRichTextBox"></RichTextBox>

Я не эксперт, но, похоже, вы не можете указать текстовый контент в XAML. Мне пришлось указать это в кодовом событии:

this.MyRichTextBox.AppendText("V A R I E D      S P A C E S");
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top