WPFテキストボックスで、文字間隔またはカーニングを指定するにはどうすればよいですか?

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

  •  27-10-2019
  •  | 
  •  

質問

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 プロパティは次のとおりです。

enter image description here

それが何を意味するのか分かりません。また、インデックスが正しいことであるかどうかはわかりません - コードのコメントは、私が気にしない「文字幅」について語っています。幅を調整したいです の間に 文字。

また、適用する方法の例はありません 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>

任意の文字列にバインドでき、文字幅検出を行う必要はありません。間隔を適切に設定します。適切なマージンはスペースです の間に 文字。

例:

Kerning

他のヒント

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");
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top