Как использовать виртуализацию пользовательского интерфейса с переопределенными шаблонами 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 содержит по умолчанию. Но виртуализация не работает. Я прочитал несколько статей, а также пару ответов здесь, но все еще не могу понять «общий путь» - что и где я должен установить, связать, добавить и т. Д., Чтобы виртуализация работала с пользовательскими шаблонами?

Ответы на вопрос(2)

Ваш ответ на вопрос