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 do controle ou do 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 do Microsoft Automação da Interface do Usuário, 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 uma propriedade personalizada, evento ou padrão de controle envolve a cooperação e o contrato 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, o consenso pode ser alcançado 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 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 Invoke 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 a funcionalidade completamente.

Criando propriedades personalizadas

Automação da 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 Automação da 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á declarar se a propriedade é localizável (ou seja, se a cadeia de caracteres pode ser convertida em diferentes idiomas de 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 Automação da Interface do Usuário notificações de eventos para responder a alterações e ações envolvendo itens da interface do usuário. A maioria das propriedades tem eventos alterados de propriedade associados que Automação da Interface do Usuário aumenta 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 da Interface do Usuário personalizados e WinEvents

Os WinEvents são um mecanismo útil de comunicação e eventos entre processos na plataforma Microsoft Windows. No entanto, a introdução de uma nova ID winEvent é arriscada porque pode causar colisões com outros aplicativos ou 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 winEvent. Para obter mais informações, consulte Alocação de IDs winEvent.

Eventos de Automação da Interface do Usuário personalizados evitam conflitos alocando a ID do evento internamente na estrutura 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 de um elemento de automação. Os métodos de padrão de controle permitem que Automação da Interface do Usuário clientes manipulem um aspecto específico do controle. As propriedades e os eventos do 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 a consultar um objeto contido, 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 os 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 de Automação da Interface do Usuário personalizadas, eventos e padrões de controle, também é possível introduzir novos tipos de controle. Ao contrário das propriedades personalizadas, dos eventos e dos padrões de controle, um tipo de controle personalizado não pode ser registrado programaticamente em runtime porque, na verdade, é apenas um valor potencial do Automação da Interface do Usuário propriedade ControlType. 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 sobre eventos de automação de interface do usuário

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