Expor informações básicas de acessibilidade

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

Nome acessível

Um nome acessível é uma cadeia de caracteres 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 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 elementos TextBlock e RichTextBlock, um nome acessível é determinado automaticamente a partir do texto visível (interno). Todo o texto nesse elemento é usado como nome. Veja Nome do texto interno.
Imagens O elemento XAML Image não tem um análogo direto ao atributo HTML alt de img e elementos semelhantes. Use AutomationProperties.Name para fornecer um nome ou use a técnica de legenda. Consulte Nomes acessíveis para imagens.
Elementos de formulário O nome acessível de um elemento de formulário deve ser o mesmo que o rótulo exibido para esse elemento. Consulte Labels 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 uma função correspondente, não seu contêiner. O elemento de contêiner 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 adaptativa possa 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 é nomeada.

Papel e valor

Os controles e outros elementos da interface do usuário que fazem parte do vocabulário XAML implementam o suporte de automação da interface do usuário para relatar a função e o valor como parte de suas definições. Você pode usar ferramentas de automação da interface do usuário para examinar as informações de função e valor dos controles ou pode ler a documentação das implementações AutomationPeer de cada controle. As funções disponíveis em uma estrutura de automação da interface do usuário são definidas na enumeração AutomationControlType. Clientes de Automação da Interface do Usuário, como tecnologias adaptativas, 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 Automação da Interface do Usuário por meio dos pares e padrões compatíveis com esse controle. Por exemplo, um elemento de formulário TextBox tem um valor. Uma tecnologia adaptativa pode ser um cliente de Automação da Interface do Usuário e pode descobrir que existe um valor e qual é o valor. Nesse caso específico, o TextBox dá suporte ao padrão IValueProvider por meio das definições de TextBoxAutomationPeer .

Observação

Para casos em que você usa AutomationProperties.Name ou outras técnicas para fornecer o nome acessível explicitamente, não inclua o mesmo texto usado pela função de controle ou informações de tipo no nome acessível. Por exemplo, não inclua strings como "botão" ou "lista" 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 adaptativas 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 você der a um controle Button um nome acessível de "botão" ou incluir "botão" como a última parte do nome, isso poderá ser lido pelos leitores de tela como "botão botão". Você deve testar esse aspecto de suas informações de acessibilidade usando o Narrador.

Influenciando os modos de exibição de á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 de árvore, em que os clientes de Automação da Interface do Usuário podem recuperar as relações entre elementos em uma interface do usuário usando três exibições possíveis: bruto, controle e conteúdo. A exibição de controle é a exibição que geralmente é usada por clientes de automação da interface do usuário porque fornece uma boa representação e organização dos elementos em uma interface do usuário que são interativos. 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 no modo de exibição de controle quando a estrutura de automação da interface do usuário representar a interface do usuário para um aplicativo Windows. Mas, às vezes, você não deseja que um elemento apareça no modo de exibição de controle devido à composição da interface do usuário, em que 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 como os elementos são expostos às exibições de árvore. Se você colocar um elemento na árvore Raw, a maioria das tecnologias assistivas não relatará esse elemento como parte de suas visualizaçõ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 pesquise 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 de valores de cadeia de caracteres de propriedades de conteúdo.

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 dar 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 anexada AutomationProperties.Name , 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 informações de acessibilidade associadas ao rótulo para o conteúdo da imagem. Veja 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 LabeledBy

A maneira preferencial de associar um rótulo a um elemento de formulário é usar um TextBlock com um x:Name para o texto do rótulo e, em seguida, definir a propriedade anexada AutomationProperties.LabeledBy no elemento de formulário para fazer referência ao TextBlock de rotulagem por seu nome XAML. Se você usar esse padrão, as tecnologias adaptativas 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 de interface do usuário específico. Normalmente, você fornece uma descrição acessível quando um nome acessível sozinho 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 totalmente seu comportamento. Se uma breve descrição não for suficiente para explicar o controle, você poderá definir a propriedade anexada AutomationProperties.HelpText, 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 por conta própria. Isso mostrará como o leitor de tela se comporta e quais informações básicas de acessibilidade podem estar faltando no aplicativo. Em seguida, você pode ajustar os valores da propriedade UI ou Automação da Interface do Usuário adequadamente. Para obter mais informações, 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 de sua interface do usuário que representam como as tecnologias adaptativas podem exibir seu aplicativo como uma árvore de automação. Em particular, há um modo Narrador que fornece uma exibiçã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 design preliminar. Para obter mais informações, consulte AccScope.

Nomes acessíveis 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 associaçã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 garantir que o nome acessível também seja um elemento localizado, você deve usar técnicas corretas para armazenar cadeias de caracteres localizáveis como recursos e, em seguida, referenciar as conexões de recursos com valores de diretiva x:Uid. Se o nome acessível vier de um uso AutomationProperties.Name definido explicitamente, verifique se a cadeia de caracteres também é localizável.

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