Все говорят, что по умолчанию ItemsPanel для ListBox это 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.
Я почти уверен, что существуют некоторые условия для использования виртуализации,как сказал мой коллега, он видел соответствующий код ListBox в прошлом.К сожалению, сейчас у нас нет доступа к отладочным версиям MS DLL.