Trabalhando com itens virtualizados

Este tópico descreve como usar a funcionalidade fornecida pelos padrões de controle ItemContainer e VirtualizedItem para localizar e recuperar informações sobre itens virtualizados.

Visão geral da virtualização

Controles que contêm um grande número de itens filho podem usar a virtualização para gerenciar os itens com eficiência. Com a virtualização, o controle mantém informações completas na memória apenas para um subconjunto de itens a qualquer momento. Normalmente, o subconjunto inclui apenas os itens que estão visíveis no momento para o usuário. Informações completas sobre os itens virtualizados restantes são mantidas no armazenamento e são carregadas na memória ou realizadas, conforme o controle precisa dele, por exemplo, à medida que novos itens se tornam visíveis para o usuário.

Os controles que usam virtualização representam um desafio porque apenas os itens realizados estão totalmente disponíveis como elementos do Microsoft Automação da Interface do Usuário na árvore Automação da Interface do Usuário. Itens virtualizados não existem na árvore, portanto, as informações sobre eles não estão disponíveis para os clientes. Para recuperar informações sobre itens virtualizados, os clientes precisam de uma maneira de forçar Automação da Interface do Usuário a passar a solicitação para realizar os itens para o controle. Depois que os itens forem realizados, Automação da Interface do Usuário poderá criar elementos Automação da Interface do Usuário para eles. Automação da Interface do Usuário inclui dois padrões de controle para permitir que os clientes trabalhem com itens virtualizados: ItemContainer e VirtualizedItem.

Como um controle dá suporte à virtualização

Qualquer controle que possa conter itens virtualizados deve dar suporte ao padrão de controle ItemContainer . Além disso, qualquer item que possa ser virtualizado deve dar suporte ao padrão de controle VirtualizedItem . A funcionalidade exposta pelos padrões de controle ItemContainer e VirtualizedItem é acessível aos clientes por meio das interfaces IUIAutomationItemContainerPattern e IUIAutomationVirtualizedItemPattern .

Como os clientes encontram e percebem itens virtualizados

Os clientes podem usar o método IUIAutomationItemContainerPattern::FindItemByProperty para pesquisar itens filho no contêiner com base no valor de uma propriedade específica. O método também pode recuperar o primeiro item no contêiner ou o item que segue o item especificado. Se um item filho correspondente for encontrado, FindItemByProperty recuperará uma interface IUIAutomationElement para o item. No entanto, se o item filho for virtualizado, a interface IUIAutomationElement será um espaço reservado. O erro UIA_E_ELEMENTNOTAVAILABLE ocorre quando o cliente tenta usar a interface IUIAutomationElement para recuperar valores de propriedade ou métodos de chamada que ainda não estão disponíveis. Quais propriedades ou métodos estão disponíveis por meio de um espaço reservado depende da implementação do controle. O único requisito para um espaço reservado é dar suporte à interface IUIAutomationVirtualizedItemPattern .

O erro UIA_E_ELEMENTNOTAVAILABLE é uma indicação para o cliente de que um item pode ser virtualizado. O cliente deve responder recuperando a interface IUIAutomationVirtualizedItemPattern para o item e, em seguida, percebendo o item chamando o método IUIAutomationVirtualizedItemPattern::Realize . Se isso for bem-sucedido, a interface IUIAutomationElement estará totalmente funcional com todas as propriedades apropriadas disponíveis.

Dependendo da implementação do controle, chamar IUIAutomationVirtualizedItemPattern::Realize pode fazer com que o controle role o item para a exibição. No entanto, um cliente não deve confiar no item rolando para a exibição ou tornado visível. Para garantir que o item esteja visível, o cliente pode usar o método IUIAutomationScrollItemPattern::ScrollIntoView .

Exemplo

Por exemplo, código que mostra como usar o suporte Automação da Interface do Usuário para virtualização, consulte Como recuperar um item virtualizado.

Visão Geral de Padrões de Controle de Automação de Interface de Usuário