Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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.
Itemcontainers worden rechtstreeks aan de ItemsControltoegevoegd. Als een toepassing bijvoorbeeld expliciet ListBoxItem objecten toevoegt aan een ListBox, dan worden de ListBox objecten door de ListBoxItem niet gevirtualiseerd.
Itemcontainers in de ItemsControl zijn van verschillende typen. Een Menu die gebruikmaakt van Separator objecten kan bijvoorbeeld geen recycling van items implementeren omdat de Menu objecten van het type Separator en MenuItembevat.
CanContentScroll instellen op
false.IsVirtualizing instellen op
false.
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
.NET Desktop feedback