WPFテキストボックスで、文字間隔またはカーニングを指定するにはどうすればよいですか?
質問
WPFテキストボックスの文字間の間隔を変更したいと思います。
のようなもの letter-spacing: 5px
CSSで利用できるもの。
Xamlで可能だと思います。最も簡単な方法は何ですか?
私は「」を見つけましたGlyphrunオブジェクトとGlyphs要素の紹介「文書化され、それが非常に役に立たないことがわかりました。
これは、そのページのコード例です。
<!-- "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
プロパティは次のとおりです。
それが何を意味するのか分かりません。また、インデックスが正しいことであるかどうかはわかりません - コードのコメントは、私が気にしない「文字幅」について語っています。幅を調整したいです の間に 文字。
また、適用する方法の例はありません Glyphs
テキストボックスの要素。試したとき、WPFテストアプリがクラッシュしたばかりでした。
私がやりたいのは、WPFテキストボックス内の描画された文字の間に表示される空のスペースをわずかに増やすことです。テキストの長さと内容は異なります。変更する必要がありますか Indicies
新しいキャラクターがあるたびにプロパティ? 「すべてのキャラクターに対して、通常よりも20%多くスペースを作る」と言う方法はありますか?
誰かが私を助けることができますか?
解決
私はグリフとフォントストレッチを試しましたが、私が探していた結果を簡単に得ることができませんでした。私は自分の目的のために働くアプローチを思いつくことができました。たぶんそれは他の人のためにも機能するでしょう。
<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>
任意の文字列にバインドでき、文字幅検出を行う必要はありません。間隔を適切に設定します。適切なマージンはスペースです の間に 文字。
例:
他のヒント
は fontstretch あなたのためのオプション?
そうしないと、調べたいかもしれません これ 前進幅の意味を示す画像があります。私はこれを以前にやったことがありませんが、これが機能するかどうかはわかりませんが、右側と左側のベアリングがあなたが望むものかもしれません!
その価値のために。 。 。
実装をRichTextBoxに切り替えるオプションがある場合、これは2013年9月に見つかった回避策よりも簡単かもしれません。 TypeSettersのような個々のスペースのカーニングを制御する方法はありません。しかし、テキストボックスは、HTMLのような追加のスペース(単一のスペースに複数の隣接するスペースを統合する)を食べていました。スペースがテキスト文字列に同じ量の間隔を表示する必要があり、RichTextboxがこれを行います。
<RichTextBox x:Name="MyRichTextBox"></RichTextBox>
私は専門家ではありませんが、XAMLでテキストコンテンツを指定できないようです。コードビハインドイベントで指定する必要がありました。
this.MyRichTextBox.AppendText("V A R I E D S P A C E S");