-2

ListBox の幅を明示的に設定しない場合、その幅は、最も幅の広い表示項目の幅に自動的に設定されます。これは、上下にスクロールし、最も幅の広い表示データ項目が変化すると、リストボックス自体の幅が増減することを意味します。

では、リスト内の最も幅の広い項目の幅を見つけて、ListBox の幅をそれに設定する最良の方法は何でしょうか? ListBox のデータ テンプレートは、CheckBox と TextBlock を含む StackPanel であるため、明らかに Textblock の幅はその中の文字列の長さによって異なります。

SO には既にいくつかの提案があり、「推測する」から「テキスト サイズを測定する」までの範囲の回答があります (UI 要素に配置せずに SL でテキスト サイズを測定するにはどうすればよいでしょうか?)。

誰か私にいくつかのアイデアを投げてもらえますか? 必要に応じて、すべてのデータ テンプレート インスタンスを反復処理しますが、より長い文字列を見つけてそこから計算する方がよい場合があります。

4

3 に答える 3

2

これを試したことはありませんが、うまく いき ます: http://thibautvs.com/blog/?p=1775

于 2011-12-20T15:39:07.790 に答える
0

これをいじってみると、ListBox を拡張/オーバーライドするまでは不可能であることがわかりました。VirtualizingStackPanel のIsVirtualizingプロパティを設定しても効果はありませんでした。

私がしなければならなかった解決策は、プログラムで適切な幅を選択することでした。

于 2010-10-17T22:26:20.750 に答える
0

ListBox は VirtualizingStackPanel をデフォルトの ItemsPanel として使用します。VirtualizingStackPanel は、表示されるアイテムに対してのみ UI 要素を作成するため、説明した動作が表示される場合があります。この動作を軽減するには、VirtualizingStackPanel.IsVirtualizing="False" を設定するか、ItemsPanel を StackPanel に変更してみてください。

于 2010-09-23T10:18:32.420 に答える