Partilhar via


Expor informações básicas de acessibilidade

As informações básicas de acessibilidade geralmente são categorizadas em nome, função e valor. Este tópico descreve o código para ajudar seu aplicativo a expor as informações básicas de que as tecnologias assistenciais precisam.

Nome acessível

Um nome acessível é uma cadeia de texto curta e descritiva que um leitor de tela usa para anunciar um elemento da interface do usuário. Defina o nome acessível para os elementos da interface do usuário para que tenham um significado importante para entender o conteúdo ou interagir com a interface do usuário. Esses elementos geralmente incluem imagens, campos de entrada, botões, controles e regiões.

Esta tabela descreve como definir ou obter um nome acessível para vários tipos de elementos em uma interface do usuário XAML.

Tipo de elemento Descrição
Texto estático Para os elementos TextBlock e RichTextBlock , um nome acessível é determinado automaticamente a partir do texto visível (interno). Todo o texto nesse elemento é usado como o nome. Veja Nome no texto interno.
Imagens O elemento Image XAML não tem um analógico direto para o atributo HTML alt de img e elementos semelhantes. Use AutomationProperties.Name para fornecer um nome ou use a técnica de legendagem. Consulte Nomes acessíveis para imagens.
Elementos de formulário O nome acessível para um elemento de formulário deve ser o mesmo que o rótulo exibido para esse elemento. Consulte Rótulos e LabeledBy.
Botões e links Por padrão, o nome acessível de um botão ou link é baseado no texto visível, usando as mesmas regras descritas em Nome do texto interno. Nos casos em que um botão contém apenas uma imagem, use AutomationProperties.Name para fornecer um equivalente somente texto da ação pretendida do botão.

A maioria dos elementos de contêiner, como painéis, não promove seu conteúdo como nome acessível. Isso ocorre porque é o conteúdo do item que deve relatar um nome e a função correspondente, não seu contêiner. O elemento container pode relatar que é um elemento que tem filhos em uma representação de automação da interface do usuário da Microsoft, de modo que a lógica de tecnologia assistiva pode atravessá-lo. Mas os usuários de tecnologias assistivas geralmente não precisam saber sobre os contêineres e, portanto, a maioria dos contêineres não são nomeados.

Papel e valor

Os controlos e outros elementos da interface de utilizador, que fazem parte do vocabulário XAML, implementam suporte à Automação da Interface do Utilizador para relatar o papel e o valor como parte das suas definições. Você pode usar ferramentas de Automação de Interface de Utilizador para examinar as informações de função e valor para os controlos, ou pode consultar a documentação das implementações do AutomationPeer de cada controlo. As funções disponíveis numa estrutura de automação da interface de utilizador são definidas na enumeração AutomationControlType. Clientes de Automação da Interface do Usuário, como tecnologias assistenciais, podem obter informações de função chamando métodos que a estrutura de Automação da Interface do Usuário expõe usando o AutomationPeer do controle.

Nem todos os controles têm um valor. Os controles que têm um valor relatam essas informações para a Automação da Interface do Usuário por meio dos pares e padrões suportados por esse controle. Por exemplo, um elemento de formulário TextBox tem um valor. Uma tecnologia assistiva pode ser um cliente de automação da interface do usuário e pode descobrir que um valor existe e qual é o valor. Neste caso específico, o TextBox suporta o padrão IValueProvider através das definições de TextBoxAutomationPeer.

Observação

Para os casos em que você usa AutomationProperties.Name ou outras técnicas para fornecer o nome acessível explicitamente, não inclua o mesmo texto que é usado pela função de controle ou digite informações no nome acessível. Por exemplo, não inclua cadeias de caracteres como "button" ou "list" no nome. As informações de função e tipo vêm de uma propriedade diferente de Automação da Interface do Usuário (LocalizedControlType) que é fornecida pelo suporte de controle padrão para Automação da Interface do Usuário. Muitas tecnologias assistenciais acrescentam o LocalizedControlType ao nome acessível, portanto, duplicar a função no nome acessível pode resultar em palavras repetidas desnecessariamente. Por exemplo, se atribuir um nome acessível de "button" a um controlo Button ou incluir "button" como a última parte do nome, isso pode ser lido pelos leitores de ecrã como "button button". Você deve testar esse aspeto de suas informações de acessibilidade usando o Narrador.

Influenciando as visualizações da árvore de Automação da Interface do Usuário

A estrutura de Automação da Interface do Usuário tem um conceito de exibições em árvore, onde os clientes de Automação da Interface do Usuário podem recuperar as relações entre os elementos em uma interface do usuário usando três modos de exibição possíveis: bruto, controle e conteúdo. A vista de controlo é frequentemente utilizada por clientes de Automação de Interface do Utilizador porque fornece uma boa representação e organização dos elementos interativos numa interface de utilizador. As ferramentas de teste geralmente permitem que você escolha qual exibição de árvore usar quando a ferramenta apresenta a organização dos elementos.

Por padrão, qualquer classe derivada de Control e alguns outros elementos aparecerão na exibição de controlo quando a estrutura de Automação da UI representar a UI de uma aplicação Windows. Mas, às vezes, você não quer que um elemento apareça na exibição de controle devido à composição da interface do usuário, onde esse elemento está duplicando informações ou apresentando informações que não são importantes para cenários de acessibilidade. Use a propriedade anexada AutomationProperties.AccessibilityView para alterar a forma como os elementos são expostos às exibições em árvore. Se colocar um elemento na árvore Raw, a maioria das tecnologias de apoio não relatará esse elemento como parte das suas visões. Para ver alguns exemplos de como isso funciona em controles existentes, abra o arquivo XAML de referência de design generic.xaml em um editor de texto e procure AutomationProperties.AccessibilityView nos modelos.

Nome do texto interno

Para facilitar o uso de cadeias de caracteres que já existem na interface do usuário visível para valores de nome acessíveis, muitos dos controles e outros elementos da interface do usuário fornecem suporte para determinar automaticamente um nome acessível padrão com base no texto interno dentro do elemento ou a partir de valores de cadeia de caracteres de propriedades de conteúdo.

  • TextBlock, RichTextBlock, TextBox e RichTextBlock promovem o valor da propriedade Text como o nome acessível padrão.
  • Qualquer subclasse ContentControl utiliza uma técnica iterativa "ToString" para encontrar strings no valor de Content e promove essas strings como o nome padrão de acessibilidade.

Observação

Conforme imposto pela Automação da Interface do Usuário, o comprimento do nome acessível não pode ser maior que 2048 caracteres. Se uma cadeia de caracteres usada para determinação automática de nome acessível exceder esse limite, o nome acessível será truncado nesse ponto.

Nomes acessíveis para imagens

Para oferecer suporte a leitores de tela e fornecer as informações básicas de identificação para cada elemento na interface do usuário, às vezes você deve fornecer alternativas de texto para informações não textuais, como imagens e gráficos (excluindo quaisquer elementos puramente decorativos ou estruturais). Esses elementos não têm texto interno, portanto, o nome acessível não terá um valor calculado. Você pode definir o nome acessível diretamente definindo a propriedade AutomationProperties.Name anexada, conforme mostrado neste exemplo.

XAML

<!-- Comment -->
<Image Source="product.png"
  AutomationProperties.Name="An image of a customer using the product."/>

Como alternativa, considere incluir uma legenda de texto que apareça na interface do usuário visível e que também sirva como as informações de acessibilidade associadas ao rótulo para o conteúdo da imagem. Aqui está um exemplo:

XAML

<Image HorizontalAlignment="Left" Width="480" x:Name="img_MyPix"
  Source="snoqualmie-NF.jpg"
  AutomationProperties.LabeledBy="{Binding ElementName=caption_MyPix}"/>
<TextBlock x:Name="caption_MyPix">Mount Snoqualmie Skiing</TextBlock>

Rótulos e EtiquetadoPor

A maneira preferida de associar um rótulo a um elemento de formulário é usar um TextBlock com um x:Name para texto de rótulo e, em seguida, definir a propriedade AutomationProperties.LabeledBy anexada no elemento de formulário para fazer referência à rotulagem TextBlock por seu nome XAML. Se você usar esse padrão, as tecnologias assistenciais poderão usar o texto do rótulo como o nome acessível para o campo de formulário. Aqui está um exemplo que mostra essa técnica.

XAML

<StackPanel x:Name="LayoutRoot" Background="White">
   <StackPanel Orientation="Horizontal">
     <TextBlock Name="lbl_FirstName">First name</TextBlock>
     <TextBox
      AutomationProperties.LabeledBy="{Binding ElementName=lbl_FirstName}"
      Name="tbFirstName" Width="100"/>
   </StackPanel>
   <StackPanel Orientation="Horizontal">
     <TextBlock Name="lbl_LastName">Last name</TextBlock>
     <TextBox
      AutomationProperties.LabeledBy="{Binding ElementName=lbl_LastName}"
      Name="tbLastName" Width="100"/>
   </StackPanel>
 </StackPanel>

Descrição acessível (opcional)

Uma descrição acessível fornece informações adicionais de acessibilidade sobre um elemento específico da interface do usuário. Normalmente, você fornece uma descrição acessível quando um nome acessível por si só não transmite adequadamente a finalidade de um elemento.

O leitor de tela do Narrador lê a descrição acessível de um elemento somente quando o usuário solicita mais informações sobre o elemento pressionando CapsLock+F.

O nome acessível destina-se a identificar o controle em vez de documentar completamente seu comportamento. Se uma breve descrição não for suficiente para explicar o controle, você pode definir a AutomationProperties.HelpText propriedade anexada além de AutomationProperties.Name.

Testando a acessibilidade com antecedência e frequência

Em última análise, a melhor abordagem para dar suporte a leitores de tela é testar seu aplicativo usando um leitor de tela você mesmo. Isso mostrará como o leitor de tela se comporta e quais informações básicas de acessibilidade podem estar faltando no aplicativo. Em seguida, pode-se ajustar os valores das propriedades da UI ou da UI Automation de acordo. Para obter mais informação, consulte Teste de acessibilidade.

Uma das ferramentas que você pode usar para testar a acessibilidade é chamada AccScope. A ferramenta AccScope é particularmente útil porque você pode ver representações visuais da interface do usuário que representam como as tecnologias assistenciais podem ver seu aplicativo como uma árvore de automação. Em particular, há um modo Narrador que fornece uma visão de como o Narrador obtém texto do seu aplicativo e como ele organiza os elementos na interface do usuário. O AccScope foi projetado para que possa ser usado e útil durante todo o ciclo de desenvolvimento de um aplicativo, mesmo durante a fase de projeto preliminar. Para obter mais informações, consulte AccScope.

Nomes acessíveis a partir de dados dinâmicos

O Windows oferece suporte a muitos controles que podem ser usados para exibir valores provenientes de uma fonte de dados associada, por meio de um recurso conhecido como vinculação de dados. Ao preencher listas com itens de dados, talvez seja necessário usar uma técnica que defina nomes acessíveis para itens de lista associados a dados depois que a lista inicial for preenchida. Para obter mais informações, consulte "Cenário 4" no exemplo de acessibilidade XAML.

Nomes acessíveis e localização

Para assegurar que o nome acessível seja também um elemento localizado, deve utilizar técnicas corretas para armazenar strings localizáveis como recursos e, em seguida, referenciar as conexões de recurso com os valores da diretiva x:Uid. Se o nome acessível for proveniente de um uso AutomationProperties.Name explicitamente definido, certifique-se de que a cadeia de caracteres também seja localizável.

Observe que as propriedades anexadas, como as propriedades AutomationProperties , usam uma sintaxe qualificada especial para o nome do recurso, para que o recurso faça referência à propriedade anexada como aplicada a um elemento específico. Por exemplo, o nome do recurso para AutomationProperties.Name aplicado a um elemento da interface do usuário chamado MediumButton é: MediumButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name.