Frage

Ich möchte den Abstand zwischen Zeichen in einem WPF -Textfeld ändern.
So etwas wie das letter-spacing: 5px was in CSS erhältlich ist.
Ich denke, es ist in XAML möglich; Was ist der einfachste Weg?

Ich fand die "Einführung in das Glyphrun -Objekt- und Glyphenelement"Dokument und fand es außerordentlich nicht hilfreich.

Dies ist ein Codebeispiel von dieser Seite:

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

Die gleiche Dokumentationsseite gibt diese "Erklärung" für das, was das ist Indices Eigentum tut:

enter image description here

Ich habe keine Ahnung, was das alles bedeutet. Ich bin mir auch nicht sicher, ob Indizes das Richtige sind - der Kommentar im Code spricht von "Charakterbreiten", die mir egal ist. Ich möchte die Breite einstellen zwischen Figuren.

Außerdem gibt es kein Beispiel dafür, wie man a anwendet Glyphs Element zu einem Textfeld. Als ich es versuchte, stürzte meine WPF -Test -App gerade ab.


Was ich tun möchte, ist leicht den leeren Raum zu erhöhen, der zwischen gezeichneten Zeichen innerhalb eines WPF -Textfelds erscheint. Der Text variiert in Länge und Inhalt. Muss ich das ändern Indicies Eigenschaft jedes Mal, wenn es einen neuen Charakter gibt? Gibt es eine Möglichkeit zu sagen: "Mach es für jeden Charakter um 20% mehr Platz als gewöhnlich?"

Kann mir jemand helfen?

War es hilfreich?

Lösung

Ich habe Glyphen und Fonttretch ausprobiert und konnte das Ergebnis, nach dem ich gesucht habe, nicht leicht erzielen. Ich konnte einen Ansatz finden, der für meine Zwecke funktioniert. Vielleicht funktioniert es auch für andere.

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

Ich kann an eine Zeichenfolge binden und muss keine Zeichenbreite erfassen, um den Abstand richtig einzustellen. Der rechte Rand ist der Raum zwischen die Buchstaben.

Beispiel:

Kerning

Andere Tipps

ist Fonttretch Eine Option für Sie?

Andernfalls möchten Sie vielleicht untersuchen Dies Es gibt ein Bild, das zeigt, was die Fortschrittsbreite bedeutet. Obwohl ich das vorher noch nicht getan habe und nicht weiß, ob dies funktioniert, um die rechte und linke Seite zu erhöhen, ist möglicherweise das, was Sie wollen!

Für was es wert ist. . .

Wenn Sie die Möglichkeit haben, Ihre Implementierung auf RichTextBox zu wechseln, ist dies möglicherweise einfacher als die Arbeit, die Sie im September 2013 gefunden haben. Ich habe es nur für meine eigenen Bedürfnisse ausprobiert und es funktioniert für das, was ich brauche. Ich sehe keinen Weg mit RichTextbox, um das Kerning einzelner Räume zu steuern, wie es die Artenserter tun. Die Textbox aß jedoch zusätzliche Räume (konsolidierte mehrere benachbarte Räume an einem einzigen Raum) wie HTML. Ich musste die Räume den gleichen Abstand wie in meiner Textzeichenfolge anzeigen, und die Richtextbox tut dies.

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

Ich bin kein Experte, aber es scheint, dass Sie den Textinhalt in XAML nicht angeben können. Ich musste es in einem Code-Behind-Ereignis angeben:

this.MyRichTextBox.AppendText("V A R I E D      S P A C E S");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top