2011-04-30 57 views
11

我想修改WPF文本框中字符之間的間距。
類似於letter-spacing: 5px的東西,可在CSS中使用。
我認爲這是可能的在XAML;最簡單的方法是什麼?如何在WPF文本框中指定字母間距或字距?

我找到了「Introduction to the GlyphRun Object and Glyphs Element」的文件,並發現它是非常無益的。

這是從該網頁的代碼實例:

<!-- "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%」。

任何人都可以幫助我嗎?

回答

14

我試圖字形和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

+0

這是一個不錯的解決方案(我投了票),但這肯定會導致性能問題。我們在一些地方使用了這個解決方案,但是我們想在具有幾百個項目的'ItemsControl'中使用它,並且它在渲染時間中添加了多個秒。在這些情況下,我們回到了常規的「TextBlock」。所以請注意/小心! – 2014-12-11 20:23:53

+0

這也會打破修剪或換行文字的能力。 – Walkor 2017-06-12 16:47:37

0

FontStretch一個選擇?

否則,你可能要考慮this有一個形象,展示了超前寬度意思。雖然我以前沒有這樣做過,也不知道這是否會增加右側和左側的軸承可能是你想要的!

-1

爲了什麼它的價值。 。 。

如果你必須選擇你的實現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");