Expor informações básicas de acessibilidade

As informações básicas de acessibilidade costumam ser categorizadas por nome, função e valor. Este tópico descreve códigos para ajudar seu aplicativo a expor as informações básicas de que tecnologias adaptativas precisam.

Nome acessível

Um nome acessível é uma cadeia de caracteres de texto curta e descritiva que o leitor de tela usa para anunciar um elemento de interface do usuário. Defina o nome acessível dos elementos de interface do usuário para que ele tenha um significado importante para a compreensão do conteúdo ou da interação com a interface do usuário. Esses elementos costumam incluir 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 IU XAML.

Tipo de elemento Descrição
Texto estático Um nome acessível é determinado automaticamente a partir do texto visível (interno) para elementos TextBlock e RichTextBlock. Todo o texto nesse elemento é usado como o nome. Consulte Nome a partir do texto interno.
Imagens O elemento Image XAML não tem um análogo direto ao atributo alt HTML de img e elementos similares. Use AutomationProperties.Name ou a técnica de legendagem para fornecer um nome. 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 se baseia 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 apenas em texto da ação pretendida do botão.

A maioria dos elementos de contêiner (como painéis) não promove o seu conteúdo como nome acessível. Isso é porque é o conteúdo do item que deve informar um nome e a função correspondente, não seu contêiner. O elemento contêiner pode relatar que é um elemento que tem filhos em uma representação de Automação de Interface do Usuário da Microsoft, de forma que a lógica de tecnologia adaptativa possa atravessá-lo. Mas os usuários de tecnologias adaptativas geralmente não precisam saber sobre os contêineres e, assim, a maioria dos contêineres não é nomeada.

Função e valor

Os controles e outros elementos de interface do usuário que fazem parte do vocabulário XAML implementam o suporte à Automação de 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 para os controles, ou pode ler a documentação para as implementações de AutomationPeer para cada controle. As funções disponíveis em uma estrutura de Automação da IU são definidas na enumeração AutomationControlType. Os 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 IU expõe usando o AutomationPeer do controle.

Nem todos os controles têm um valor. Os controles que não têm um valor reportam essa informação à Automação da Interface do Usuário por meio de pares e padrões para os quais esse controle oferece suporte. Por exemplo, um elemento de formulário TextBox tem um valor. Um tecnologia adaptativa pode ser um cliente de Automação da Interface do Usuário e pode descobrir que um valor existe e qual é esse valor. Nesse caso específico, o TextBox tem suporte para o padrão IValueProvider por meio das definições TextBoxAutomationPeer.

Observação

Nos casos em que você usa AutomationProperties.Name ou outras técnicas para fornecer o nome acessível explicitamente, não inclua o mesmo texto como é usado pelas informações de função ou tipo de controle no nome acessível. Por exemplo, não inclua cadeias de caracteres como "botão" ou "lista" no nome. As informações de função e tipo vêm de uma propriedade de Automação da Interface do Usuário diferente (LocalizedControlType) que é fornecida pelo suporte de controle padrão para Automação da Interface do Usuário. Muitas tecnologias adaptativas anexam o LocalizedControlType ao nome acessível. Por isso, duplicar a função no nome acessível pode resultar em palavras repetidas desnecessariamente. Por exemplo, se você der a um controle Button o nome acessível "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 as exibições de árvore de automação da IU

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

Por padrão, qualquer classe derivada de Controle e alguns outros elementos aparecerão na exibição de controle quando a estrutura de Automação da Interface do Usuário representar a interface do usuário de um aplicativo do Windows. Mas às vezes você não quer que um elemento apareça na exibição do controle devido à composição da interface do usuário, onde esse elemento está duplicando ou apresentando informações que não são importantes para os cenários de acessibilidade. Use a propriedade anexada AutomationProperties.AccessibilityView para alterar como os elementos são expostos para os modos de exibição de árvore. Se você colocar um elemento na árvore Raw, a maioria das tecnologias adaptativas não reportará esse elemento como parte de seus modos de exibição. 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 por AutomationProperties.AccessibilityView nos modelos.

Nome do texto interno

Para facilitar o uso de cadeias de caracteres que já existem na IU visível para valores de nome acessível, muitos dos controles e outros elementos de IU oferecem suporte para determinar automaticamente um nome acessível padrão com base no texto interno dentro do elemento ou a partir de valores de cadeias de caracteres com 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 usa uma técnica "ToString" iterativa para encontrar cadeias de caracteres em seu valor Content e promove essas cadeias de caracteres como o nome acessível padrão.

Observação

Como imposto pela Automação da Interface do Usuário, o tamanho do nome acessível não pode exceder 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 momento.

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 da interface do usuário, você pode ter que fornecer alternativas de texto para informações não textuais, como imagens e gráficos (excluindo todos os elementos puramente decorativos ou estruturais). Estes elementos não têm texto interno, assim, o nome acessível não terá um valor calculado. Você pode definir o nome acessível diretamente configurando a propriedade anexada AutomationProperties.Name como mostrado neste exemplo.

XAML

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

Como alternativa, leve em consideração a inclusão de uma legenda de texto que apareça na IU visível e que também sirva como a informação de acessibilidade associada ao rótulo para o conteúdo de 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 melhor maneira de associar um rótulo a um elemento de formulário é usar um TextBlock com um x:Name para texto de rótulo e, então, configurar a propriedade anexada AutomationProperties.LabeledBy no elemento de formulário para fazer referência ao TextBlock rotulador pelo 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 oferece informações de acessibilidade adicionais sobre um elemento de IU específico. Normalmente, você fornece uma descrição acessível quando o nome acessível sozinho não informa adequadamente a finalidade do elemento.

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

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

Testando a acessibilidade de forma precoce e frequente

Definitivamente, a melhor abordagem para suportar leitores de tela é testar o seu aplicativo usando, você mesmo, um leitor de tela. Isso lhe mostrará como se comporta o leitor de tela e as informações básicas de acessibilidade podem estar ausentes do aplicativo. Em seguida, você pode ajustar os valores da interface do usuário ou da propriedade de Automação da Interface do Usuário adequadamente. Para obter mais informações, consulte Testes de acessibilidade.

Uma das ferramentas que você pode usar para testar a acessibilidade chama-se AccScope. A ferramenta AccScope é especialmente útil porque você pode ver representações visuais de sua IU que demostram como as tecnologias assistidas poderiam ver seu aplicativo como uma árvore de automação. Em particular, há um modo Narrador que dá uma visão de como o Narrador obtém o texto de seu aplicativo e como ele organiza os elementos na IU. A AccScope foi criada de modo que possa ser usada e útil ao longo do ciclo de desenvolvimento de um aplicativo, mesmo durante a fase preliminar de design. 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 vinculação de dados. Quando você preenche as listas com itens de dados, talvez precise usar uma técnica que define os nomes acessíveis para itens de lista vinculada a dados depois que a lista inicial é preenchida. Para obter mais informações, consulte o "Cenário 4" na Amostra de acessibilidade XAML.

Nomes acessíveis e localização

Para verificar se o nome acessível também é um elemento que é localizado, você deve usar técnicas corretas para armazenar cadeias de caracteres localizáveis como recursos e fazer referência às conexões de recursos com valores da diretiva x:Uid. Se o nome acessível vier de um uso AutomationProperties.Name configurado explicitamente, certifique-se de que a cadeia de caracteres também possa ser localizada.

Observe que as propriedades anexadas, como as propriedades AutomationProperties, usam uma sintaxe qualificadora especial para o nome de recurso, para que o recurso faça referência à propriedade anexada conforme se aplica a um elemento específico. Por exemplo, o nome de recurso para AutomationProperties.Name conforme se aplica a elementos de IU chamados MediumButton é: MediumButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name.