I\'d like to modify the spacing between characters in a WPF TextBox.
Something like the letter-spacing: 5px
thing that is available in CSS.
I think it i
I tried Glyphs and FontStretch and couldn't easily get the result I was looking for. I was able to come up with an approach that works for my purposes. Maybe it will work for others, as well.
<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>
I can bind to any string and don't need to do any character width detection to set the spacing properly. The right margin is the space between the letters.
Example:
is FontStretch an option for you?
Otherwise you might want to look into this there is an image, showing what advance width means. Though I have not done this before and don't know if this works increasing right and left side bearings might be what you want!
For what its worth . . .
If you have the option to switch your implementation to RichTextBox, this might be easier than the work-around you found Sept 2013. I just tried it for my own needs and it works for what I need. I do not see a way with RichTextBox to control kerning of individual spaces like typesetters do. But TextBox was eating additional spaces (consolidating multiple adjacent spaces to a single space) like HTML. I needed for the spaces to display the same amount of spacing as is in my text String, and RichTextBox does this.
<RichTextBox x:Name="MyRichTextBox"></RichTextBox>
I'm no expert, but it seems you can't specify the text content in XAML. I had to specify it in a code-behind event:
this.MyRichTextBox.AppendText("V A R I E D S P A C E S");