Utilisation d’éléments virtualisés

Cette rubrique explique comment utiliser les fonctionnalités fournies par les modèles de contrôle ItemContainer et VirtualizedItem pour rechercher et récupérer des informations sur les éléments virtualisés.

Vue d’ensemble de la virtualisation

Les contrôles qui contiennent un grand nombre d’éléments enfants peuvent utiliser la virtualisation pour gérer efficacement les éléments. Avec la virtualisation, le contrôle conserve toutes les informations en mémoire pour un sous-ensemble d’éléments à un moment donné. En règle générale, le sous-ensemble inclut uniquement les éléments actuellement visibles par l’utilisateur. Les informations complètes sur les éléments virtualisés restants sont conservées dans le stockage et sont chargées en mémoire ou réalisées, au fur et à mesure que le contrôle en a besoin, par exemple, à mesure que de nouveaux éléments deviennent visibles par l’utilisateur.

Les contrôles qui utilisent la virtualisation représentent un défi, car seuls les éléments réalisés sont entièrement disponibles en tant qu’éléments Microsoft UI Automation dans l’arborescence UI Automation. Les éléments virtualisés n’existent pas dans l’arborescence. Les informations les concernant ne sont donc pas disponibles pour les clients. Pour récupérer des informations sur les éléments virtualisés, les clients ont besoin d’un moyen de forcer UI Automation à transmettre la demande de réalisation des éléments au contrôle. Une fois les éléments réalisés, UI Automation pouvez créer des éléments UI Automation pour eux. UI Automation comprend deux modèles de contrôle pour permettre aux clients d’utiliser des éléments virtualisés : ItemContainer et VirtualizedItem.

Comment un contrôle prend en charge la virtualisation

Tout contrôle pouvant contenir des éléments virtualisés doit prendre en charge le modèle de contrôle ItemContainer . En outre, tout élément pouvant être virtualisé doit prendre en charge le modèle de contrôle VirtualizedItem . Les fonctionnalités exposées par les modèles de contrôle ItemContainer et VirtualizedItem sont accessibles aux clients via les interfaces IUIAutomationItemContainerPattern et IUIAutomationVirtualizedItemPattern .

Comment les clients recherchent et réalisent des éléments virtualisés

Les clients peuvent utiliser la méthode IUIAutomationItemContainerPattern::FindItemByProperty pour rechercher des éléments enfants dans le conteneur en fonction de la valeur d’une propriété particulière. La méthode peut également récupérer le premier élément du conteneur ou l’élément qui suit l’élément spécifié. Si un élément enfant correspondant est trouvé, FindItemByProperty récupère une interface IUIAutomationElement pour l’élément. Toutefois, si l’élément enfant est virtualisé, l’interface IUIAutomationElement est un espace réservé. L’erreur UIA_E_ELEMENTNOTAVAILABLE se produit lorsque le client tente d’utiliser l’interface IUIAutomationElement pour récupérer des valeurs de propriété ou appeler des méthodes qui ne sont pas encore disponibles. Les propriétés ou méthodes disponibles via un espace réservé dépendent de l’implémentation du contrôle. La seule condition requise pour un espace réservé est de prendre en charge l’interface IUIAutomationVirtualizedItemPattern .

L’erreur UIA_E_ELEMENTNOTAVAILABLE indique au client qu’un élément peut être virtualisé. Le client doit répondre en récupérant l’interface IUIAutomationVirtualizedItemPattern pour l’élément, puis en réalisant l’élément en appelant la méthode IUIAutomationVirtualizedItemPattern::Realize . Si cela réussit, l’interface IUIAutomationElement est entièrement fonctionnelle avec toutes les propriétés appropriées disponibles.

En fonction de l’implémentation du contrôle, l’appel de IUIAutomationVirtualizedItemPattern::Realize peut entraîner le défilement de l’élément dans l’affichage. Toutefois, un client ne doit pas s’appuyer sur l’élément qui fait défiler l’affichage ou qu’il est rendu visible. Pour s’assurer que l’élément est visible, le client peut utiliser la méthode IUIAutomationScrollItemPattern::ScrollIntoView .

Exemple

Pour obtenir un exemple de code qui montre comment utiliser le UI Automation prise en charge de la virtualisation, consultez Comment récupérer un élément virtualisé.

Vue d'ensemble des modèles de contrôle UI Automation