1

私の WPF ビューには TextBlock 要素があり、ビュー モデルの文字列プロパティにデータ バインドされています。このプロパティのテキストは少し長くなる可能性があるため、1 行で表示されるようにトリミングする必要があります。レイアウトを変更してはならないため、複数の行を使用することは避けなければなりません。また、データ バインディング ソースは変更せず、単一の文字列のままにする必要があります。表示されるテキストは、次の例のようになります。

  • XY のオブジェクト
  • ABC の別のオブジェクト
  • 3 つの宣伝文句オブジェクト (XY、ABC、DEF)
  • 20 個の素晴らしいオブジェクト (XY #1、#2、ABC #2、#3、DEF、GHI など)

簡単な解決策は次のとおりです。

<TextBlock Text="{Binding PageTitle}" TextTrimming="CharacterEllipsis"/>

これは最初の 2 つのサンプル テキストでは問題なく機能しますが、最後の 2 つのサンプルでは、​​閉じ括弧を表示したままにしておきたいと思います。だから私が現在得ているのはこれです:

  • 20 個の素晴らしいオブジェクト (XY #1、#2、ABC #2、#3、DEF...

しかし、私が求めているのはこれです:

  • 20 個の素晴らしいオブジェクト (XY #1、#2、ABC #2、#3、DEF... )

WPFでそれを行う簡単な方法はありますか? 基本的に、省略記号文字列は常に 3 つのドット (視覚的には Unicode 文字である可能性もあります) であり、ソース文字列に含まれる終了句読点をすべて含める必要があります。

必要に応じてカスタム コントロールを作成することもできますが、トリミングの実装についても助けが必要です。

4

2 に答える 2

2

簡単なアプローチ: a を使用しDockPanel、2 つの s を入れTextBlockます。1 つ目は文字列を省略記号でトリミングして表示し、2 つ目は閉じ括弧を右にドッキングして表示します。

<DockPanel>
    <TextBlock Text=")" DockPanel.Dock="Right" />
    <TextBlock Text="{Binding PageTitle}" TextTrimming="CharacterEllipsis" />
</DockPanel>

自分でトリミングを行いたい場合は、この投稿で私の答えを見ることができます: Ellipsis at start of string in WPF ListView

于 2016-04-22T16:23:12.170 に答える
0

実装はありませんが、バインディングを使用しているため、カスタム コントロールではなくコンバーターを使用することを検討します。convert メソッドの args で必要なものすべてにアクセスして、表示する文字列の量を計算し、ビュー モデルのデータを変更することなく表示方法を完全に制御できます。

于 2012-11-30T16:36:11.537 に答える