Как использовать виртуализацию пользовательского интерфейса с переопределенными шаблонами ListBox
Я пытаюсь использовать ListBox как представление, содержащее несколько элементов, и, конечно, мне нужно использовать виртуализацию пользовательского интерфейса в нем.
Проблема в том, что виртуализация работает только тогда, когда я объявляю ListBox следующим образом:
<ListBox
ItemsSource="{Binding ItemsSource}"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling">
<ListBox.ItemTemplate>
<DataTemplate>
<views:SiteEntryView />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Но если я попытаюсь настроить его, он больше не будет виртуализироваться:
<ListBox
ItemsSource="{Binding ItemsSource}"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling">
<ListBox.Template>
<ControlTemplate>
<ScrollViewer>
<ItemsPresenter />
</ScrollViewer>
</ControlTemplate>
</ListBox.Template>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<views:SiteEntryView />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Насколько я обнаружил, этот образец содержит то же самое, что ListBox содержит по умолчанию. Но виртуализация не работает. Я прочитал несколько статей, а также пару ответов здесь, но все еще не могу понять «общий путь» - что и где я должен установить, связать, добавить и т. Д., Чтобы виртуализация работала с пользовательскими шаблонами?