How can I specify letter spacing or kerning, in a WPF TextBox?

前端 未结 3 588
既然无缘
既然无缘 2020-12-05 11:07

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

相关标签:
3条回答
  • 2020-12-05 11:33

    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:

    Kerning

    0 讨论(0)
  • 2020-12-05 11:47

    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!

    0 讨论(0)
  • 2020-12-05 11:51

    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");
    
    0 讨论(0)
提交回复
热议问题