Trabajar con elementos virtualizados

En este tema se describe cómo usar la funcionalidad proporcionada por los patrones de control ItemContainer y VirtualizedItem para buscar y recuperar información sobre los elementos virtualizados.

Introducción a la virtualización

Los controles que contienen un gran número de elementos secundarios pueden usar la virtualización para administrar de forma eficaz los elementos. Con la virtualización, el control mantiene información completa en la memoria solo para un subconjunto de elementos en un momento dado. Normalmente, el subconjunto incluye solo los elementos que están visibles actualmente para el usuario. La información completa sobre los elementos virtualizados restantes se mantiene en el almacenamiento y se carga en la memoria, o se realiza, ya que el control lo necesita, por ejemplo, a medida que los nuevos elementos sean visibles para el usuario.

Los controles que usan la virtualización representan un desafío porque solo los elementos realizados están totalmente disponibles como elementos de Microsoft Automatización de la interfaz de usuario en el árbol de Automatización de la interfaz de usuario. Los elementos virtualizados no existen en el árbol, por lo que la información sobre ellos no está disponible para los clientes. Para recuperar información acerca de los elementos virtualizados, los clientes necesitan una manera de forzar a Automatización de la interfaz de usuario para pasar la solicitud para realizar los elementos en el control. Una vez realizados los elementos, Automatización de la interfaz de usuario pueden crear Automatización de la interfaz de usuario elementos para ellos. Automatización de la interfaz de usuario incluye dos patrones de control para permitir que los clientes funcionen con elementos virtualizados: ItemContainer y VirtualizedItem.

Cómo un control admite la virtualización

Cualquier control que pueda contener elementos virtualizados debe admitir el patrón de control ItemContainer . Además, cualquier elemento que se pueda virtualizar debe admitir el patrón de control VirtualizedItem . La funcionalidad expuesta por los patrones de control ItemContainer y VirtualizedItem es accesible para los clientes a través de las interfaces IUIAutomationItemContainerPattern e IUIAutomationVirtualizedItemPattern .

Cómo los clientes buscan y se dan cuenta de elementos virtualizados

Los clientes pueden usar el método IUIAutomationItemContainerPattern::FindItemByProperty para buscar elementos secundarios en el contenedor en función del valor de una propiedad determinada. El método también puede recuperar el primer elemento del contenedor o el elemento que sigue al elemento especificado. Si se encuentra un elemento secundario coincidente, FindItemByProperty recupera una interfaz IUIAutomationElement para el elemento. Sin embargo, si el elemento secundario está virtualizado, la interfaz IUIAutomationElement es un marcador de posición. El error UIA_E_ELEMENTNOTAVAILABLE se produce cuando el cliente intenta usar la interfaz IUIAutomationElement para recuperar valores de propiedad o llamar a métodos que aún no están disponibles. Qué propiedades o métodos están disponibles a través de un marcador de posición depende de la implementación del control. El único requisito para un marcador de posición es admitir la interfaz IUIAutomationVirtualizedItemPattern .

El error UIA_E_ELEMENTNOTAVAILABLE es una indicación para el cliente de que un elemento se puede virtualizar. El cliente debe responder recuperando la interfaz IUIAutomationVirtualizedItemPattern del elemento y, a continuación, realizando el elemento llamando al método IUIAutomationVirtualizedItemPattern::Realize . Si esto se realiza correctamente, la interfaz IUIAutomationElement es totalmente funcional con todas las propiedades adecuadas disponibles.

Según la implementación del control, llamar a IUIAutomationVirtualizedItemPattern::Realize puede hacer que el control desplácese por el elemento a la vista. Sin embargo, un cliente no debe basarse en el desplazamiento del elemento en la vista o hacer visible. Para asegurarse de que el elemento está visible, el cliente puede usar el método IUIAutomationScrollItemPattern::ScrollIntoView .

Ejemplo

Para obtener código de ejemplo que muestra cómo usar la compatibilidad de Automatización de la interfaz de usuario para la virtualización, vea Cómo recuperar un elemento virtualizado.

Información general acerca de los patrones de control de UI Automation