Wie wird die UI-Virtualisierung mit neu definierten ListBox-Vorlagen verwendet?

Ich versuche, ListBox als Ansicht mit mehreren Elementen zu verwenden, und ich muss natürlich die UI-Virtualisierung verwenden.

Das Problem ist, dass die Virtualisierung nur funktioniert, wenn ich ListBox folgendermaßen deklariere:

<ListBox 
    ItemsSource="{Binding ItemsSource}" 
    VirtualizingStackPanel.IsVirtualizing="True"
    VirtualizingStackPanel.VirtualizationMode="Recycling">

    <ListBox.ItemTemplate>
        <DataTemplate>
            <views:SiteEntryView />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Aber wenn ich versuche, es anzupassen, wird es nicht mehr virtualisiert:

<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>

Soweit ich festgestellt habe, enthält dieses Beispiel genau das, was ListBox standardmäßig enthält. Aber die Virtualisierung funktioniert nicht. Ich habe hier mehrere Artikel und auch einige Antworten gelesen, kann aber immer noch nicht den "allgemeinen Weg" herausfinden - was und wo muss ich einstellen, binden, hinzufügen usw., damit die Virtualisierung mit benutzerdefinierten Vorlagen funktioniert?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage