私は を持ってListBox
いPopupControl
ます。問題は、スクロール中に Popup が実際の最も広い要素に合わせてサイズ変更されることです。
このサイズ変更を回避し、リスト全体で最も幅の広い要素に自動的に調整するにはどうすればよいですか?
私はそれを入れようとしましたGrid
が、成功しませんでした。
これが解決策です:このプロパティを追加する
<ListBox VirtualizingStackPanel.IsVirtualizing="False"
Panel にすべての要素が含まれ、幅が最も広い要素に合わせて調整されるため、サイズ変更は停止します。Virtualizing Panel では、表示される項目の一部に過ぎず、ListBox は実際に表示される最も広い要素に合わせて幅を調整します。
欠点は、 Virtualizing Panelを使用しないことです (デフォルトでオンになっています)。
仮想化を継続したい場合は、Popup.Width
を定数に設定できます。
もちろん、正しい定数を選択するには、それぞれの幅を計算 (または少なくとも推測) しListBoxItem
、最大値を選択する必要があります。... 通常、コンテンツに基づいて大まかな推測を行うことはそれほど難しくありません。
ほとんどの WPFUIElement
コントロールにはWidth
" " に設定できるプロパティがあるAuto
ため、最も幅の広い要素と同じスペースを占有します。