Comment puis-je spécifier l'espacement des lettres ou crénage, dans un WPF TextBox?

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

  •  27-10-2019
  •  | 
  •  

Question

Je voudrais modifier l'espacement entre les caractères dans une zone de texte WPF.
Quelque chose comme la chose letter-spacing: 5px qui est disponible en CSS.
Je pense qu'il est possible en XAML; quelle est la façon la plus simple?

J'ai trouvé le « Introduction à l'objet GlyphRun et Glyphes élément «document et trouvé qu'il était très inutile.

Ceci est un exemple de code de cette page:

<!-- "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"
/>

La même page de documentation donne à cette "explication" de ce qui fait la propriété Indices:

entrer image description ici

Je ne sais pas ce que tout cela signifie. Je suis également pas sûr que les indices est la bonne chose - le commentaire dans le code parle de « largeurs de caractères » que je ne se soucient pas. Je veux régler la largeur entre caractères.

En outre, il n'y a pas d'exemple pour savoir comment appliquer un élément Glyphs à une zone de texte. Quand je l'ai essayé, mon application de test de WPF vient de s'écraser.


Ce que je veux faire est d'augmenter légèrement l'espace vide qui apparaît entre les personnages dessinés dans un WPF TextBox. Le texte varie en longueur et le contenu. Dois-je modifier la propriété Indicies chaque fois qu'il ya un nouveau personnage? Est-il possible de dire « rendre 20% plus d'espace que d'habitude, pour chaque caractère ».

Aide Quelqu'un peut-il me?

Était-ce utile?

La solution

J'ai essayé Glyphes et FontStretch et ne pouvait pas facilement obtenir le résultat que je cherchais. Je suis en mesure de trouver une approche qui fonctionne pour mes fins. Peut-être que cela va fonctionner pour les autres, aussi bien.

<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>

peut se lier à une chaîne et ne pas besoin de faire une détection de la largeur des caractères pour régler l'espacement correctement. La marge de droite est l'espace entre les lettres.

Exemple:

crénage

Autres conseils

FontStretch une option pour vous?

Sinon, vous voudrez peut-être regarder dans ce il y a une image, montrant ce que signifie la largeur d'avance. Bien que je ne l'ai pas fait cela avant et je ne sais pas si cela fonctionne de plus en plus de roulements latéraux droit et gauche pourrait être ce que vous voulez!

Pour ce que ça vaut. . .

Si vous avez la possibilité de changer votre implémentation à RichTextBox, cela pourrait être plus facile que le travail que vous autour trouvé septembre 2013. Je viens d'essayer pour mes propres besoins et il fonctionne pour ce que je dois. Je ne vois pas un moyen de RichTextBox pour contrôler crénage des espaces individuels comme le font typographes. Mais TextBox mangeait des espaces supplémentaires (regroupant plusieurs espaces adjacents à un seul espace) comme le HTML. Je avais besoin pour les espaces pour afficher la même quantité d'espacement est dans mon texte String, et RichTextBox fait cela.

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

Je ne suis pas expert, mais il semble que vous ne pouvez pas spécifier le contenu du texte en XAML. Je devais le préciser dans un événement code-behind:

this.MyRichTextBox.AppendText("V A R I E D      S P A C E S");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top