Compartilhar via


Projetar propriedades personalizadas, eventos e padrões de controle

O design de uma propriedade personalizada, evento ou padrão de controle deve ser útil em uma ampla variedade de implementações de controle. Designs específicos de controle ou aplicativo que são úteis apenas em cenários limitados devem ser evitados. O design deve seguir o exemplo das propriedades, eventos e padrões de controle existentes da Automação da Interface do Usuário da Microsoft, que foram cuidadosamente especificados para atender às necessidades de uma ampla variedade de aplicativos de acessibilidade e teste automatizado.

A implementação da especificação para um padrão de propriedade, evento ou controle personalizado envolve a cooperação e o acordo das partes nos lados do cliente e do provedor e exige que ambas as partes implementem a especificação de forma consistente. As empresas são incentivadas a trabalhar com organizações do setor, como a AIA (Accessibility Interoperability Alliance) para projetar e publicar a especificação para a propriedade personalizada, evento ou padrão de controle. Dessa forma, é possível chegar a um consenso e a interoperabilidade com a maior variedade de aplicativos pode ser assegurada.

Este tópico contém as seguintes seções:

Quando usar propriedades e eventos personalizados

Antes de criar uma propriedade personalizada, um evento ou um padrão de controle, verifique se a Automação da Interface do Usuário não fornece uma solução existente. Por exemplo, a criação de um padrão de controle "Clique" personalizado não é necessária porque o padrão de controle de invocação de de já descreve essa funcionalidade.

Se você decidir que um padrão de propriedade, evento ou controle personalizado é necessário, verifique se ele não é muito vago ou genérico. Por exemplo, um padrão de controle chamado "Mostrar" não é útil porque a visibilidade de um controle pode ser indicada por uma propriedade de disponibilidade no elemento, como UIA_IsExpandCollapsePatternAvailablePropertyId ou UIA_IsScrollItemPatternAvailablePropertyId.

Antes de implementar uma solução personalizada, confirme cuidadosamente se ela é necessária e, em seguida, projete completamente a funcionalidade.

Criando propriedades personalizadas

A Automação de Interface do Usuário inclui dois tipos básicos de propriedades: propriedades de elemento de automação e propriedades de padrão de controle. As propriedades do elemento de automação consistem em um conjunto comum de propriedades, como Name, AcceleratorKey e ClassName, que são expostas por todos os elementos da Automação de Interface do Usuário, independentemente do tipo de controle. As propriedades de padrão de controle são expostas por um controle por meio de um padrão de controle específico. Cada padrão de controle tem um conjunto correspondente de propriedades de padrão de controle que o controle deve expor. Por exemplo, um controle que dá suporte ao padrão de controle Grid expõe as propriedades ColumnCount e RowCount.

Uma propriedade de elemento de automação personalizada ou uma propriedade de padrão de controle deve seguir as seguintes diretrizes de design:

  • Uma propriedade personalizada deve ter um dos seguintes tipos de dados especificados pela enumeração UIAutomationType. Nenhum outro tipo de dados tem suporte para propriedades personalizadas.
    • UIAutomationType_Bool
    • UIAutomationType_Double
    • UIAutomationType_Element
    • UIAutomationType_Int
    • UIAutomationType_Point
    • UIAutomationType_String
  • Se a propriedade personalizada contiver dados de cadeia de caracteres (BSTR), a especificação deverá indicar se a propriedade é localizável (ou seja, se a cadeia de caracteres pode ser traduzida para diferentes idiomas da interface do usuário).
  • A propriedade personalizada não deve se sobrepor aos recursos ou à funcionalidade das propriedades existentes.

Criando eventos personalizados

Os aplicativos usam notificações de evento de Automação de Interface do Usuário para responder a alterações e ações envolvendo itens de interface do usuário. A maioria das propriedades tem eventos com alteração de propriedade associados que a Automação da Interface do Usuário gera quando o valor da propriedade é alterado. Se você introduzir uma propriedade personalizada, deverá considerar a introdução de quaisquer eventos personalizados correspondentes que também possam ser necessários.

Um evento personalizado deve seguir as seguintes diretrizes de design:

  • O evento personalizado deve ser "sem estado". Ele não pode ser associado a uma propriedade ou valor específico.
  • O evento personalizado não deve se sobrepor à definição ou função de qualquer evento existente.

Eventos de automação de interface do usuário personalizados e WinEvents

winEvents são um mecanismo de comunicação e evento de interprocesso útil na plataforma Microsoft Windows. No entanto, a introdução de uma nova ID do WinEvent é arriscada porque pode causar colisões com outros aplicativos ou com o sistema operacional, resultando na instável do sistema. Para evitar colisões, a Microsoft definiu várias categorias diferentes de WinEvents e, para cada categoria, definiu um ou mais intervalos de valores para uso como IDs do WinEvent. Para obter mais informações, consulte Alocação de IDs winEvent.

Eventos personalizados de Automação de Interface do Usuário evitam conflitos alocando a ID do evento internamente na estrutura de Automação da Interface do Usuário.

Criando padrões de controle personalizados

Um padrão de controle é uma interface com propriedades, métodos e eventos que definem uma parte discreta da funcionalidade disponível em um elemento de automação. Os métodos de padrão de controle permitem que os clientes de Automação da Interface do Usuário manipulem um aspecto específico do controle. As propriedades e os eventos de padrão de controle fornecem informações sobre algum aspecto do controle e fornecem informações sobre o estado do elemento de automação que implementa o padrão de controle.

Um padrão de controle personalizado deve seguir as seguintes diretrizes de design:

  • Um padrão de controle personalizado deve abranger um cenário específico. Por exemplo, o padrão de controle ItemContainer destina-se à consulta de um objeto independentemente do estado de virtualização, mas não enumera nem conta os objetos contidos.
  • Um padrão de controle personalizado não deve se sobrepor aos recursos dos padrões de controle existentes. Por exemplo, os padrões de controle Invoke e ExpandCollapse não devem ser combinados e apresentados como um novo padrão de controle. Reutilize padrões de controle existentes ou defina cenários exclusivos com novos padrões de controle.
  • Vários padrões de controle personalizados podem ser projetados juntos para dar suporte a cenários complexos. Por exemplo, os padrões de controle Selection e SelectionItem funcionam juntos para dar suporte a cenários gerais de seleção de objetos.

Tipos de controle personalizados

Embora este tópico se concentre em como registrar propriedades, eventos e padrões de controle personalizados da Automação de Interface do Usuário, também é possível introduzir novos tipos de controle. Ao contrário de propriedades personalizadas, eventos e padrões de controle, um tipo de controle personalizado não pode ser registrado programaticamente em runtime porque, na verdade, é apenas um valor potencial da propriedade ControlType de Automação da Interface do Usuário. No entanto, uma ID de tipo de controle personalizado pode ser definida, publicada e disponibilizada para outros clientes e provedores usarem. Para obter mais informações sobre tipos de controle, consulte Visão geral dos tipos de controle de automação da interface do usuário.

Conceitual

registrando propriedades personalizadas, eventos e padrões de controle

Visão geral das propriedades de automação da interface do usuário

Visão geral de eventos de automação da interface do usuário

Visão geral dos padrões de controle de automação da interface do usuário