質問
WPF にラベルがたくさんあるグラフがあります。これらのラベルのテキストは動的に読み込まれるため、変更される可能性があります。幅を自動だけに設定すると、これらのラベルが重なってテキストが読めなくなる可能性があります。
グラフは複数のサイズをサポートしているため、グラフが大きくなるとバーのサイズが変更され、テキスト用のスペースが増えます。次に、利用可能なスペースにテキストを調整したいと思います。ラベルが小さすぎる場合は、ラベルを表示したくなくなります (ツールヒントが利用できるため、ユーザーは引き続き必要な情報を取得できます)。文字列「Case 1, blah blah」を考えてみます。おそらく、文字列全体を表示するのに十分なスペースはなく、最初の単語だけを表示します。この場合、文字列を「Case 1..」とし、.. を付けます。ツールチップにさらに情報があることを示します。
文字列に使用できる長さを決定できます。しかし、1 つの文字が占めるスペースをどのように決定すればよいでしょうか?もちろん、単にラベルのサイズを変更することもできますが、そうすると文字列がどこかで切り取られるだけになり、おそらくユーザーにとって役に立たないでしょう(見た目も悪くなります)。
何か案は?
解決
ラベルの代わりに TextBlock を使用できる場合は、 テキストトリミング このプロパティは、最も近い文字または最も近い単語に対してこれを実行します。
TextTrimming プロパティに満足しているようですが、これを編集して TextBox コントロールに GetRectFromCharacterIndex このメソッドを使用すると、フォント設定がラベルと一致している限り、画面上の 1 つ以上の文字のサイズを確認できます。これは、最も近い文字や単語ではなく、ラベル内の特定の場所をトリミングしたい場合に便利です。
他のヒント
はない専門家が、私はあなたのコードではなく、XAMLでこれを行う必要がありますと思うだろう。
テキストのために利用可能なスペースの実際のピクセル幅を取得することにより開始します。 次いで、XAMLフロントエンドで利用文字セット、ドットピッチ等を見て、そこから文字ごとに必要な画素幅を算出する。
また、文字サイズを変更するだけでなく、ラベルの長さを短くすることで見ることができる。