Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Windows Presentation Foundation (WPF) inclut un grand nombre des composants d’interface utilisateur courants utilisés dans la plupart des applications Windows. Cette rubrique contient des techniques permettant d’améliorer les performances de votre interface utilisateur.
Affichage de jeux de données volumineux
Les contrôles WPF tels que le ListView et ComboBox sont utilisés pour afficher des listes d’éléments dans une application. Si la liste à afficher est volumineuse, les performances de l’application peuvent être affectées. Cela est dû au fait que le système de disposition standard crée un conteneur de disposition pour chaque élément associé au contrôle de liste et calcule sa taille et sa position de disposition. En règle générale, vous n’avez pas besoin d’afficher tous les éléments en même temps ; Au lieu de cela, vous affichez un sous-ensemble et l’utilisateur fait défiler la liste. Dans ce cas, il est judicieux d’utiliser la virtualisation de l’interface utilisateur, ce qui signifie que la génération du conteneur d’éléments et le calcul de disposition associé pour un élément sont différés jusqu’à ce que l’élément soit visible.
UI Virtualization est un aspect important des contrôles de liste. La virtualisation de l’interface utilisateur ne doit pas être confondue avec la virtualisation des données. La virtualisation de l’interface utilisateur stocke uniquement les éléments visibles en mémoire, mais dans un scénario de liaison de données stocke toute la structure de données en mémoire. En revanche, la virtualisation des données stocke uniquement les éléments de données visibles sur l’écran en mémoire.
Par défaut, la virtualisation de l’interface utilisateur est activée pour les contrôles ListView et ListBox lorsque leurs éléments de liste sont liés aux données.
TreeView la virtualisation peut être activée en définissant la VirtualizingStackPanel.IsVirtualizing propriété associée sur true
. Si vous souhaitez activer la virtualisation de l’interface utilisateur pour les contrôles personnalisés qui dérivent de ItemsControl ou pour des contrôles d’élément existants qui utilisent la classe StackPanel, par exemple ComboBox, vous pouvez définir ItemsPanel sur VirtualizingStackPanel et IsVirtualizing sur true
. Malheureusement, vous pouvez désactiver la virtualisation de l’interface utilisateur pour ces contrôles sans le réaliser. Voici une liste de conditions qui désactivent la virtualisation de l’interface utilisateur.
Les conteneurs d’éléments sont ajoutés directement au ItemsControl. Par exemple, si une application ajoute ListBoxItem explicitement des objets à un ListBox, elle ListBox ne virtualise pas les ListBoxItem objets.
Les conteneurs d’éléments dans le ItemsControl sont de différents types. Par exemple, un Menu qui utilise des objets Separator ne peut pas implémenter le recyclage des éléments, car le Menu contient des objets de type Separator et MenuItem.
Définition CanContentScroll sur
false
.Définition IsVirtualizing sur
false
.
Une considération importante lorsque vous virtualisez des conteneurs d’éléments est de savoir si vous avez des informations d’état supplémentaires associées à un conteneur d’éléments qui appartient à l’élément. Dans ce cas, vous devez enregistrer l’état supplémentaire. Par exemple, vous pouvez avoir un élément contenu dans un Expander contrôle et que l’état IsExpanded est lié au conteneur de l’élément, et non à l’élément lui-même. Lorsque le conteneur est réutilisé pour un nouvel élément, la valeur actuelle est IsExpanded utilisée pour le nouvel élément. En outre, l’ancien élément perd la valeur correcte IsExpanded .
Actuellement, aucun contrôle WPF n’offre de prise en charge intégrée de la virtualisation des données.
Recyclage des conteneurs
Une optimisation de la virtualisation de l’interface utilisateur ajoutée dans .NET Framework 3.5 SP1 pour les contrôles qui héritent de ItemsControl est le recyclage des conteneurs, ce qui peut également améliorer les performances de défilement. Lorsqu'une ItemsControl utilisant la virtualisation de l'UI est peuplée, elle crée un conteneur d’éléments pour chaque élément qui apparaît en vue et détruit le conteneur d’éléments pour chaque élément qui sort de la vue. Le recyclage des conteneurs permet au contrôle de réutiliser les conteneurs d’éléments existants pour différents éléments de données, afin que les conteneurs d’éléments ne soient pas créés et détruits en permanence lorsque l’utilisateur défile le ItemsControl. Vous pouvez choisir d’activer le recyclage des éléments en définissant la propriété attachée VirtualizationMode à Recycling.
Tout ItemsControl qui prend en charge la virtualisation peut utiliser le recyclage des conteneurs. Pour obtenir un exemple d’activation du recyclage des conteneurs sur un ListBox, consultez Améliorer les performances de défilement d’un ListBox.
Prise en charge de la virtualisation bidirectionnelle
VirtualizingStackPanel offre une prise en charge intégrée de la virtualisation de l’interface utilisateur dans une direction, horizontalement ou verticalement. Si vous souhaitez utiliser la virtualisation bidirectionnelle pour vos contrôles, vous devez implémenter un panneau personnalisé qui étend la VirtualizingStackPanel classe. La VirtualizingStackPanel classe expose des méthodes virtuelles telles que OnViewportSizeChanged, , LineUpPageUp, et MouseWheelUp. Ces méthodes virtuelles vous permettent de détecter une modification dans la partie visible d’une liste et de la gérer en conséquence.
Optimisation des modèles
L’arborescence visuelle contient tous les éléments visuels d’une application. En plus des objets directement créés, il contient également des objets en raison de l’expansion du modèle. Par exemple, lorsque vous créez un Button, vous obtenez également et ClassicBorderDecorator des ContentPresenter objets dans l’arborescence visuelle. Si vous n’avez pas optimisé vos modèles de contrôle, vous créez peut-être beaucoup d’objets inutiles supplémentaires dans l’arborescence visuelle. Pour plus d’informations sur l’arborescence visuelle, consultez vue d’ensemble du rendu graphique WPF.
Défilement différé
Par défaut, lorsque l’utilisateur fait glisser le pouce sur une barre de défilement, l’affichage de contenu est mis à jour en permanence. Si le défilement est lent dans votre contrôle, envisagez d’utiliser le défilement différé. Dans le défilement différé, le contenu est mis à jour uniquement lorsque l’utilisateur libère le pouce.
Pour implémenter le défilement différé, définissez la IsDeferredScrollingEnabled propriété sur true
.
IsDeferredScrollingEnabled est une propriété jointe et peut être définie sur ScrollViewer et n’importe quel contrôle qui a un ScrollViewer modèle de contrôle.
Contrôles qui implémentent des fonctionnalités de performances
Le tableau suivant répertorie les contrôles courants pour l’affichage des données et leur prise en charge des fonctionnalités de performances. Pour plus d’informations sur l’activation de ces fonctionnalités, consultez les sections précédentes.
Contrôle | Virtualisation | Recyclage des conteneurs | Défilement différé |
---|---|---|---|
ComboBox | Peut être activé | Peut être activé | Peut être activé |
ContextMenu | Peut être activé | Peut être activé | Peut être activé |
DocumentViewer | Non disponible | Non disponible | Peut être activé |
ListBox | Par défaut | Peut être activé | Peut être activé |
ListView | Par défaut | Peut être activé | Peut être activé |
TreeView | Peut être activé | Peut être activé | Peut être activé |
ToolBar | Non disponible | Non disponible | Peut être activé |
Remarque
Pour un exemple d'activation de la virtualisation et du recyclage des conteneurs sur un objet TreeView, consultez Améliorer les performances d’un TreeView.
Voir aussi
.NET Desktop feedback