ListBoxのデフォルトのItemsPanelはVirtualizingStackPanelだと誰もが言っています。ListBoxから派生したクラス(MyListBoxと呼びます)を作成しましたが、デフォルトではStackPanelになっています。
つまり、たとえば次のように、仮想化を強制する必要があります。
const string itemsPanelTemplateString = @"
<ItemsPanelTemplate
xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" >
<VirtualizingStackPanel/>
</ItemsPanelTemplate>";
MyListBox {
this.ItemsPanel = (ItemsPanelTemplate)
System.Windows.Markup.XamlReader.Load(itemsPanelTemplateString);
}
ここに私のクラスを転載することはできますが、それは重要ではありません。一般的な答えを知りたいのですが。
このクラスは、事前定義されたListBoxスタイルを変更しませんが、独自のListBoxItemから派生したクラスを使用します。
私の同僚が過去にそれぞれのリストボックスコードを見たと言ったので、仮想化を使用するためのいくつかの条件があると確信しています。残念ながら、現時点では、MSdllのデバッグバージョンにアクセスできません。