Delen via


Prestaties optimaliseren: Besturingselementen

Windows Presentation Foundation (WPF) bevat veel van de algemene gebruikersinterfaceonderdelen (UI) die worden gebruikt in de meeste Windows-toepassingen. Dit onderwerp bevat technieken voor het verbeteren van de prestaties van uw gebruikersinterface.

Grote gegevenssets weergeven

WPF-besturingselementen zoals de ListView en ComboBox worden gebruikt om lijsten met items in een toepassing weer te geven. Als de lijst die moet worden weergegeven groot is, kunnen de prestaties van de toepassing worden beïnvloed. Dit komt doordat het standaardindelingssysteem een indelingscontainer maakt voor elk item dat is gekoppeld aan het lijstbeheer en de indelingsgrootte en -positie berekent. Normaal gesproken hoeft u niet alle items tegelijk weer te geven; In plaats daarvan geeft u een subset weer en schuift de gebruiker door de lijst. In dit geval is het zinvol om ui virtualisatiete gebruiken, wat betekent dat het genereren van de itemcontainer en de bijbehorende indelingsberekening voor een item wordt uitgesteld totdat het item zichtbaar is.

UI-virtualisatie is een belangrijk aspect van lijstbesturingselementen. Ui-virtualisatie mag niet worden verward met gegevensvirtualisatie. Met UI-virtualisatie worden alleen zichtbare items in het geheugen opgeslagen, maar in een gegevensbindingsscenario wordt de volledige gegevensstructuur in het geheugen opgeslagen. Gegevensvirtualisatie slaat daarentegen alleen de gegevensitems op die zichtbaar zijn op het scherm in het geheugen.

Ui-virtualisatie is standaard ingeschakeld voor de ListView en ListBox controls wanneer hun lijstitems zijn gekoppeld aan data. TreeView virtualisatie kan worden ingeschakeld door de VirtualizingStackPanel.IsVirtualizing gekoppelde eigenschap in te stellen op true. Als u UI-virtualisatie wilt inschakelen voor aangepaste besturingselementen die zijn afgeleid van ItemsControl of bestaande itembesturingselementen die gebruikmaken van de StackPanel-klasse, zoals ComboBox, kunt u de ItemsPanel instellen op VirtualizingStackPanel en IsVirtualizing instellen op true. Helaas kunt u UI-virtualisatie uitschakelen voor deze besturingselementen zonder dat u dit realiseert. Hier volgt een lijst met voorwaarden waarmee UI-virtualisatie wordt uitgeschakeld.

Een belangrijke overweging bij het virtualiseren van itemcontainers is of u aanvullende statusinformatie hebt die is gekoppeld aan een itemcontainer die bij het item hoort. In dit geval moet u de extra status opslaan. U hebt bijvoorbeeld een item in een Expander besturingselement en de status IsExpanded is gebonden aan de container van het item en niet aan het item zelf. Wanneer de container opnieuw wordt gebruikt voor een nieuw item, wordt de huidige waarde van IsExpanded gebruikt voor het nieuwe item. Bovendien verliest het oude item de juiste IsExpanded waarde.

Momenteel bieden geen WPF-besturingselementen ingebouwde ondersteuning voor gegevensvirtualisatie.

Container-recycling

Een optimalisatie voor UI-virtualisatie die is toegevoegd in .NET Framework 3.5 SP1 voor controles die erven van ItemsControl is containerrecycling, wat ook de scrollprestaties kan verbeteren. Wanneer een ItemsControl die gebruikmaakt van UI-virtualisatie wordt gevuld, wordt er een itemcontainer gemaakt voor elk item dat in beeld schuift en de itemcontainer vernietigt voor elk item dat uit de weergave schuift. containerrecycling stelt het controle-element in staat om bestaande itemcontainers voor diverse gegevensitems opnieuw te gebruiken, zodat itemcontainers niet voortdurend worden aangemaakt en vernietigd terwijl de gebruiker door de ItemsControlscrolt. U kunt ervoor kiezen om itemrecycling in te schakelen door de VirtualizationMode gekoppelde eigenschap in te stellen op Recycling.

Elke ItemsControl die ondersteuning biedt voor virtualisatie, kan gebruikmaken van containerrecycling. Zie voor een voorbeeld van hoe je containerrecycling op een ListBoxkunt inschakelen, Verbeter de schuifprestaties van een ListBox.

Ondersteuning voor bidirectionele virtualisatie

VirtualizingStackPanel biedt ingebouwde ondersteuning voor UI-virtualisatie in één richting, horizontaal of verticaal. Als u bidirectionele virtualisatie voor uw besturingselementen wilt gebruiken, moet u een aangepast deelvenster implementeren dat de VirtualizingStackPanel klasse uitbreidt. De VirtualizingStackPanel-klasse bevat virtuele methoden zoals OnViewportSizeChanged, LineUp, PageUpen MouseWheelUp. Met deze virtuele methoden kunt u een wijziging in het zichtbare deel van een lijst detecteren en deze dienovereenkomstig afhandelen.

Sjablonen optimaliseren

De visuele boom bevat alle visuele elementen in een applicatie. Naast de objecten die rechtstreeks zijn gemaakt, bevat het ook objecten vanwege sjabloonuitbreiding. Wanneer u bijvoorbeeld een Buttonmaakt, krijgt u ook de objecten ClassicBorderDecorator en ContentPresenter in de visuele boom. Als u uw besturingssjablonen nog niet hebt geoptimaliseerd, maakt u mogelijk veel extra overbodige objecten in de visuele structuur. Zie WPF Graphics Rendering Overviewvoor meer informatie over de visuele structuur.

Uitgestelde scrolling

Wanneer de gebruiker de duim op een schuifbalk sleept, wordt de inhoudsweergave continu bijgewerkt. Als scrollen traag is in uw controle, overweeg uitgestelde schuifbewegingen te gebruiken. Bij vertraagd scrollen wordt de inhoud alleen bijgewerkt wanneer de gebruiker de schuifbalk loslaat.

Als u uitgesteld schuiven wilt implementeren, stelt u de eigenschap IsDeferredScrollingEnabled in op true. IsDeferredScrollingEnabled is een gekoppelde eigenschap en kan worden ingesteld op ScrollViewer en elk besturingselement met een ScrollViewer in de bijbehorende besturingselementsjabloon.

Besturingselementen voor het implementeren van prestatiefuncties

De volgende tabel bevat de algemene besturingselementen voor het weergeven van gegevens en de ondersteuning van prestatiefuncties. Zie de vorige secties voor informatie over het inschakelen van deze functies.

Beheersing Virtualisatie Container-recycling Uitgestelde scrolling
ComboBox Kan worden ingeschakeld Kan worden ingeschakeld Kan worden ingeschakeld
ContextMenu Kan worden ingeschakeld Kan worden ingeschakeld Kan worden ingeschakeld
DocumentViewer Niet beschikbaar Niet beschikbaar Kan worden ingeschakeld
ListBox Verstek Kan worden ingeschakeld Kan worden ingeschakeld
ListView Verstek Kan worden ingeschakeld Kan worden ingeschakeld
TreeView Kan worden ingeschakeld Kan worden ingeschakeld Kan worden ingeschakeld
ToolBar Niet beschikbaar Niet beschikbaar Kan worden ingeschakeld

Opmerking

Zie TreeViewverbeteren voor een voorbeeld van het inschakelen van virtualisatie en containerrecycling op een .

Zie ook