Padrão de controle ItemContainer
Descreve diretrizes e convenções para implementar IItemContainerProvider, incluindo informações sobre métodos. O padrão de controle ItemContainer é usado para dar suporte à virtualização do item.
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, pois o controle precisa dele, por exemplo, à medida que novos itens se tornam visíveis para o usuário.
Por exemplo, o diagrama a seguir mostra uma caixa de listagem que contém milhares de itens virtualizados. Como o controle mantém informações completas apenas para os itens filho que estão visíveis no momento, o provedor pode expor elementos da Automação da Interface do Usuário da Microsoft apenas para os itens 100 – 127.
Os controles que usam a virtualização representam um desafio porque apenas itens realizados (des virtualizados) estão totalmente disponíveis como elementos de Automação da Interface do Usuário na árvore de 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 fornecer informações sobre itens virtualizados, os provedores implementam o padrão de controle ItemContainer, que expõe a interface deIItemContainerProvider. O métodoFindItemByPropertylocaliza itens filho com base no valor de uma propriedade específica, como Name, AutomationIdou IsSelected. Se um item for virtualizado, FindItemByProperty recuperará um elemento de espaço reservado da Automação da Interface do Usuário para o item. Um elemento de espaço reservado é uma implementação da interface deIRawElementProviderSimple que dá suporte apenas ao padrão de controle VirtualizedItem.
O método IVirtualizedItemProvider::Realize permite que um cliente solicite que um item virtualizado seja realizado, expondo assim um elemento de Automação de Interface do Usuário completo para o item para que todas as propriedades e padrões necessários estejam disponíveis.
Embora a principal finalidade do padrão de controle ItemContainer seja dar suporte a cenários de contêiner virtualizado, ele pode ser implementado por qualquer contêiner que recupere itens filho por nome, independentemente de o contêiner usar a virtualização.
Este tópico contém as seções a seguir.
- diretrizes e convenções de implementação
- membros necessários para iItemContainerProvider
- tópicos relacionados
Diretrizes e convenções de implementação
Ao implementar o padrão de controle ItemContainer, observe as seguintes diretrizes e convenções:
- Qualquer controle que possa conter itens virtualizados deve dar suporte ao padrão de controle ItemContainer. Qualquer contêiner que dê suporte à recuperação de itens com base em um valor de propriedade pode dar suporte a esse padrão, independentemente de o contêiner usar a virtualização.
- Quando um contêiner é virtualizado, outros padrões de controle, como Selection, Tablee Grid podem ser afetados. Por exemplo, o método ISelectionProvider::GetSelection pode dar suporte apenas a elementos que estão no visor ou apenas elementos selecionados que não estão virtualizados no momento.
- O padrão de controle de Rolagem não deve ser afetado pela virtualização.
- Nenhuma contagem de itens ou informações de índice está disponível para itens virtualizados. Um controle virtualizado pode usar o DescribedBy ou a propriedade ItemStatus para fornecer essas informações, se necessário.
- Os desenvolvedores de controle devem documentar e publicar detalhes de todas as propriedades e padrões de controle da Automação da Interface do Usuário afetados pelo uso da virtualização. Embora o ItemContainer e o VirtualizedItem padrões de controle ofereçam suporte básico, eles podem não dar suporte a alguns comportamentos de virtualização.
As diretrizes e requisitos a seguir se aplicam ao métodoIItemContainerProvider::FindItemByProperty.
- Embora não seja necessário, a Microsoft recomenda que FindItemByProperty suporte às propriedades Name, AutomationIde IsSelected.
- FindItemByProperty pode ser lento se precisar atravessar vários objetos para encontrar um correspondente.
- FindItemByProperty pode ser chamado repetidamente para localizar itens em sequência. Os itens podem estar em qualquer ordem, desde que cada item seja retornado apenas uma vez.
- FindItemByProperty podem ser implementados para localizar apenas os elementos que aparecem no controle ou no modo de exibição de conteúdo da árvore de Automação da Interface do Usuário. Elementos que aparecem apenas no modo de exibição bruto podem ser ignorados para evitar a recuperação de vários elementos que representam apenas uma parte de um "item" para o usuário.
- Quando os critérios de pesquisa correspondem a um item virtualizado, o provedor pode retornar um elemento de espaço reservado que dá suporte ao padrão de controle VirtualizedItem. As diretrizes a seguir se aplicam a elementos de espaço reservado:
- A recuperação de um elemento de espaço reservado para um item virtualizado não deve causar alterações na interface do usuário.
- O elemento espaço reservado deve ser um par de outros elementos filho (é necessário um evento com alteração de estrutura).
- Quando possível, o provedor pode criar um elemento de automação completa em vez de um espaço reservado.
- Quando os critérios de pesquisa correspondem a um elemento não virtualizado, o provedor deve retornar o elemento real, não um espaço reservado.
- Quando nenhum item for encontrado, IItemContainerProvider::FindItemByProperty deve definir o parâmetro pFound para NULL e retornar S_OK.
- Quando o parâmetro propertyId for 0, o provedor deverá retornar o próximo item após pStartAfter.
- Se o parâmetro pStartAfter for NULL e propertyId for 0, o provedor deverá retornar o primeiro item no contêiner.
- Quando o parâmetro propertyId é 0, o parâmetro de valor é ignorado.
As diretrizes e requisitos a seguir se aplicam a elementos de espaço reservado para itens virtualizados na árvore de Automação da Interface do Usuário.
- Embora os provedores sejam incentivados a dar suporte a mais propriedades e padrões de controle para um elemento de espaço reservado, somente o padrão de controle VirtualizedItem é necessário.
- O provedor pode invalidar um elemento de espaço reservado anterior quando IItemContainerProvider::FindItemByProperty é chamado novamente. (Se um cliente precisar realizar o elemento de espaço reservado, ele deverá fazê-lo imediatamente; caso contrário, o elemento poderá ser invalidado se FindItemByProperty for chamado novamente ou se o visor for alterado por qualquer motivo.)
- Ações de interface do usuário, como rolagem ou redimensionamento, podem fazer com que o visor do contêiner seja alterado e um novo conjunto de itens filho fique visível. Nesse caso, os elementos de espaço reservado recuperados anteriormente podem não estar disponíveis na árvore de Automação da Interface do Usuário.
- O provedor não deve virtualizar elementos de interface do usuário que estão disponíveis na tela no visor do objeto de contêiner.
Membros necessários para IItemContainerProvider
O método a seguir é necessário para implementar a interface deIItemContainerProvider.
Membros necessários | Tipo de membro | Anotações |
---|---|---|
findItemByProperty | Método | Nenhum |
O padrão de controle ItemContainer não tem nenhuma propriedade ou eventos associados.
Tópicos relacionados