Implementando o padrão de controle Invoke de automação de interface de usuário

Observação

Esta documentação destina-se a desenvolvedores de .NET Framework que querem usar as classes da Automação da Interface do Usuário gerenciadas definidas no namespace System.Windows.Automation. Para obter as informações mais recentes sobre a Automação da Interface do Usuário, confira API de Automação do Windows: Automação da Interface do Usuário.

Este tópico apresenta diretrizes e convenções para implementar IInvokeProvider, incluindo informações sobre eventos e propriedades. Links para referências adicionais são listados no final do tópico.

O padrão InvokePattern de controle é usado para dar suporte a controles que não mantêm o estado quando ativados, mas que iniciam ou executam uma só ação inequívoca. Controles que mantêm o estado, como caixas de seleção e botões de opção, devem implementar IToggleProvider e ISelectionItemProvider, respectivamente. Para ver exemplos de controles que implementam esse padrão de controle Invoke, confira Mapeamento de Padrões de Controle para clientes da Automação da Interface do Usuário.

Diretrizes e convenções de implementação

Ao implementar o padrão de controle Invoke, observe as seguintes diretrizes e convenções:

  • Os controles implementarão IInvokeProvider se o mesmo comportamento não for exposto por meio de outro provedor de padrão de controle. Por exemplo, se o método Invoke em um controle executar a mesma ação que o método Expand ou Collapse, o controle não deverá implementar IInvokeProvider.

  • A invocação de um controle geralmente é executada clicando ou clicando duas vezes ou pressionando ENTER, um atalho de teclado predefinido ou alguma combinação alternativa de teclas.

  • InvokedEvent é gerado em um controle que foi ativado (como uma resposta a um controle que executa sua ação associada). Se possível, o evento deve ser acionado depois que o controle tiver concluído a ação e retornado sem bloqueio. O evento Invocado deve ser acionado antes de atender à solicitação Invoke nos seguintes cenários:

    • Não é possível ou prático aguardar até que a ação seja concluída.

    • A ação requer interação do usuário.

    • A ação é demorada e fará com que o cliente de chamada seja bloqueado por um período significativo de tempo.

  • Se a invocação do controle tiver efeitos colaterais significativos, esses efeitos colaterais deverão ser expostos por meio da propriedade HelpText. Por exemplo, mesmo que Invoke não esteja associado à seleção, Invoke pode fazer com que outro controle seja selecionado.

  • Os efeitos de focalizar (ou focalizar com o mouse) geralmente não constituem um evento Invocado. No entanto, os controles que executam uma ação (em vez de causar um efeito visual) com base no estado de foco devem dar suporte ao padrão de controle InvokePattern.

Observação

Essa implementação será considerada um problema de acessibilidade se o controle puder ser invocado apenas como resultado de um efeito colateral relacionado ao mouse.

  • Invocar um controle é diferente de selecionar um item. No entanto, dependendo do controle, a invocação dele poderá fazer com que o item seja selecionado como um efeito colateral. Por exemplo, invocar um item de lista de documentos do Microsoft Word na pasta Meus Documentos seleciona o item e abre o documento.

  • Um elemento pode desaparecer da árvore Automação da Interface do Usuário imediatamente após ser invocado. A solicitação de informações do elemento fornecido pelo retorno de chamada do evento pode falhar como resultado. A busca prévia de informações em cache é a solução alternativa recomendada.

  • Os controles podem implementar vários padrões de controle. Por exemplo, o controle Cor de preenchimento na barra de ferramentas do Microsoft Excel implementa os padrões de controle InvokePattern e ExpandCollapsePattern. ExpandCollapsePattern expõe o menu e preenche InvokePattern a seleção ativa com a cor escolhida.

Membros obrigatórios para IInvokeProvider

As propriedades e os métodos a seguir são necessários para implementar IInvokeProvider.

Membros necessários Tipo de membro Observações
Invoke method Invoke é uma chamada assíncrona e deve retornar imediatamente sem bloqueio.

Esse comportamento é particularmente crítico para controles que, direta ou indiretamente, iniciam uma caixa de diálogo modal quando invocado. Qualquer cliente de Automação da Interface do Usuário que instigou o evento permanecerá bloqueado até que a caixa de diálogo modal seja fechada.

Exceções

Os provedores devem gerar as exceções a seguir.

Tipo de exceção Condição
ElementNotEnabledException Se o controle não está habilitado.

Confira também