Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Windows Presentation Foundation (WPF) enthält viele der gängigen Ui-Komponenten (User-Interface), die in den meisten Windows-Anwendungen verwendet werden. Dieses Thema enthält Techniken zur Verbesserung der Leistung ihrer Benutzeroberfläche.
Anzeigen großer Datensätze
WPF-Steuerelemente wie die ListView und ComboBox werden verwendet, um Listen von Elementen in einer Anwendung anzuzeigen. Wenn die anzuzeigende Liste groß ist, kann die Leistung der Anwendung beeinträchtigt werden. Dies liegt daran, dass das Standardlayoutsystem einen Layoutcontainer für jedes Element erstellt, das dem Listensteuerelement zugeordnet ist, und die Layoutgröße und -position berechnet. In der Regel müssen Sie nicht alle Elemente gleichzeitig anzeigen. Stattdessen zeigen Sie eine Teilmenge an, und der Benutzer führt einen Bildlauf durch die Liste durch. In diesem Fall ist es sinnvoll, die UI-Virtualisierung zu verwenden, was bedeutet, dass die Elementcontainergenerierung und die zugeordnete Layoutberechnung für ein Element zurückgestellt wird, bis das Element sichtbar ist.
Die UI-Virtualisierung ist ein wichtiger Aspekt von Listensteuerelementen. Die UI-Virtualisierung sollte nicht mit der Datenvirtualisierung verwechselt werden. Die UI-Virtualisierung speichert nur sichtbare Elemente im Arbeitsspeicher, aber in einem Datenbindungsszenario speichert die gesamte Datenstruktur im Arbeitsspeicher. Im Gegensatz dazu speichert die Datenvirtualisierung nur die Datenelemente, die auf dem Bildschirm im Arbeitsspeicher sichtbar sind.
Standardmäßig ist die UI-Virtualisierung für die ListView- und ListBox-Steuerelemente aktiviert, wenn deren Listenelemente an Daten gebunden sind.
TreeViewDie Virtualisierung kann aktiviert werden, indem die VirtualizingStackPanel.IsVirtualizing angeschlossene Eigenschaft auf true
festgelegt wird.true
Wenn Sie die UI-Virtualisierung für benutzerdefinierte Steuerelemente aktivieren möchten, die von ItemsControl oder vorhandenen Elementsteuerelementen, die die StackPanel-Klasse verwenden, wie z. B. ComboBox, abgeleitet sind, können Sie die ItemsPanel-Eigenschaft auf VirtualizingStackPanel setzen und IsVirtualizing auf true
festlegen. Leider können Sie die UI-Virtualisierung für diese Steuerelemente deaktivieren, ohne sie zu erkennen. Im Folgenden finden Sie eine Liste der Bedingungen, die die UI-Virtualisierung deaktivieren.
Itemcontainer werden direkt dem ItemsControl hinzugefügt. Wenn eine Anwendung beispielsweise explizit ListBoxItem Objekte zu einem ListBox hinzufügt, dann virtualisiert ListBox die ListBoxItem Objekte nicht.
Behälter in ItemsControl haben unterschiedliche Typen. Ein Menu, das Separator Objekte verwendet, kann beispielsweise kein Element-Recycling implementieren, da das Menu Objekte vom Typ Separator und MenuItem enthält.
Einstellung CanContentScroll auf
false
.Einstellung IsVirtualizing auf
false
.
Ein wichtiger Aspekt beim Virtualisieren von Elementcontainern ist, ob zusätzliche Statusinformationen einem Elementcontainer zugeordnet sind, der zum Element gehört. In diesem Fall müssen Sie den zusätzlichen Zustand speichern. Sie können z. B. ein Element in einem Expander Steuerelement enthalten, und der IsExpanded Zustand ist an den Container des Elements und nicht an das Element selbst gebunden. Wenn der Container für ein neues Element wiederverwendet wird, wird der aktuelle Wert von IsExpanded für das neue Element genutzt. Darüber hinaus verliert das alte Element den richtigen IsExpanded Wert.
Derzeit bieten keine WPF-Steuerelemente integrierte Unterstützung für die Datenvirtualisierung.
Recycling von Containern
Eine Optimierung der UI-Virtualisierung, die im .NET Framework 3.5 SP1 für Steuerelemente hinzugefügt wurde, die von ItemsControl erben, ist das Containerrecycling, das auch die Scroll-Leistung verbessern kann. Wenn eine ItemsControl-Benutzeroberflächenvirtualisierung mit Elementen gefüllt wird, erstellt sie für jedes Element, das in den sichtbaren Bereich scrollt, einen Elementcontainer und zerstört den Elementcontainer für jedes Element, das aus dem sichtbaren Bereich scrollt. Das Wiederverwenden von Containern ermöglicht es dem Steuerelement, die vorhandenen Elementcontainer für verschiedene Datenelemente wiederzuverwenden, sodass Elementcontainer nicht ständig erstellt und zerstört werden, während der Benutzer scrollt ItemsControl. Sie können das Wiederverwerten von Elementen aktivieren, indem Sie die VirtualizationMode angefügte Eigenschaft auf Recyclingfestlegen.
Jede ItemsControl, die Virtualisierung unterstützt, kann Containerrecycling verwenden. Ein Beispiel, wie Sie das Containerrecycling für einen ListBox ListBox-Container aktivieren können, finden Sie unter So verbessern Sie die Bildlaufleistung eines ListBox.
Unterstützen der bidirektionalen Virtualisierung
VirtualizingStackPanel bietet integrierte Unterstützung für die UI-Virtualisierung in einer Richtung, entweder horizontal oder vertikal. Wenn Sie bidirektionale Virtualisierung für Ihre Steuerelemente verwenden möchten, müssen Sie einen benutzerdefinierten Bereich implementieren, der die VirtualizingStackPanel Klasse erweitert. Die VirtualizingStackPanel Klasse stellt virtuelle Methoden wie OnViewportSizeChanged, LineUp, PageUp und MouseWheelUp bereit. Mit diesen virtuellen Methoden können Sie eine Änderung im sichtbaren Teil einer Liste erkennen und angemessen darauf reagieren.
Optimieren von Vorlagen
Der visuelle Baum enthält alle visuellen Elemente in einer Anwendung. Zusätzlich zu den direkt erstellten Objekten enthält sie auch Objekte aufgrund der Vorlagenerweiterung. Wenn Sie beispielsweise ein Button erstellen, erhalten Sie auch ClassicBorderDecorator- und ContentPresenter-Objekte in der visuellen Struktur. Wenn Sie Ihre Steuerelementvorlagen nicht optimiert haben, erstellen Sie möglicherweise viele zusätzliche unnötige Objekte in der visuellen Struktur. Weitere Informationen zur visuellen Struktur finden Sie unter WPF Graphics Rendering Overview.
Verzögerter Bildlauf
Wenn der Benutzer den Daumen standardmäßig auf eine Bildlaufleiste zieht, wird die Inhaltsansicht kontinuierlich aktualisiert. Wenn der Bildlauf in Ihrem Steuerelement langsam ist, sollten Sie verzögerten Bildlauf verwenden. Beim verzögerten Bildlauf wird der Inhalt nur aktualisiert, wenn der Benutzer den Daumen loslässt.
Um verzögerten Bildlauf zu implementieren, legen Sie die Eigenschaft IsDeferredScrollingEnabled auf true
fest.
IsDeferredScrollingEnabled ist eine angefügte Eigenschaft, die auf ScrollViewer und jedes Steuerelement angewendet werden kann, in dessen Steuerelementvorlage ein ScrollViewer enthalten ist.
Steuerelemente, die Leistungsfeatures implementieren
In der folgenden Tabelle sind die allgemeinen Steuerelemente zum Anzeigen von Daten und deren Unterstützung von Leistungsfeatures aufgeführt. Informationen zum Aktivieren dieser Features finden Sie in den vorherigen Abschnitten.
Steuerung | Virtualisierung | Recycling von Containern | Verzögerter Bildlauf |
---|---|---|---|
ComboBox | Kann aktiviert werden | Kann aktiviert werden | Kann aktiviert werden |
ContextMenu | Kann aktiviert werden | Kann aktiviert werden | Kann aktiviert werden |
DocumentViewer | Nicht verfügbar | Nicht verfügbar | Kann aktiviert werden |
ListBox | Standard | Kann aktiviert werden | Kann aktiviert werden |
ListView | Standard | Kann aktiviert werden | Kann aktiviert werden |
TreeView | Kann aktiviert werden | Kann aktiviert werden | Kann aktiviert werden |
ToolBar | Nicht verfügbar | Nicht verfügbar | Kann aktiviert werden |
Hinweis
Ein Beispiel dafür, wie Sie die Virtualisierung und das Containerrecycling in einer TreeView aktivieren, finden Sie unter "Leistung einer TreeView verbessern".
Siehe auch
.NET Desktop feedback