Esporre informazioni di accessibilità di base

Le informazioni di accessibilità di base vengono spesso classificate in nome, ruolo e valore. Questo argomento descrive il codice che consente all'app di esporre le informazioni di base necessarie alle tecnologie di assistive technology.

Nome accessibile

Un nome accessibile è una stringa di testo breve e descrittiva utilizzata da un'utilità per la lettura dello schermo per annunciare un elemento dell'interfaccia utente. Impostare il nome accessibile per gli elementi dell'interfaccia utente in modo che abbiano un significato importante per comprendere il contenuto o interagire con l'interfaccia utente. Tali elementi includono in genere immagini, campi di input, pulsanti, controlli e aree.

Questa tabella descrive come definire o ottenere un nome accessibile per vari tipi di elementi in un'interfaccia utente XAML.

Tipo di elemento Descrizione
Testo statico Per gli elementi TextBlock e RichTextBlock, un nome accessibile viene determinato automaticamente dal testo visibile (interno). Tutto il testo in tale elemento viene usato come nome. Vedere Nome dal testo interno.
Immagini L'elemento Xaml Image non ha un'analogia diretta con l'attributo ALT HTML di img e elementi simili. Usare AutomationProperties.Name per specificare un nome o usare la tecnica di didascalia. Vedere Nomi accessibili per le immagini.
Elementi dei moduli Il nome accessibile per un elemento del modulo deve corrispondere all'etichetta visualizzata per tale elemento. Vedere Etichette e LabeledBy.
Pulsanti e link Per impostazione predefinita, il nome accessibile di un pulsante o di un collegamento si basa sul testo visibile, usando le stesse regole descritte in Nome dal testo interno. Nei casi in cui un pulsante contiene solo un'immagine, usare AutomationProperties.Name per fornire un equivalente di solo testo dell'azione prevista del pulsante.

La maggior parte degli elementi del contenitore, ad esempio i pannelli, non alza di livello il contenuto come nome accessibile. Questo perché è il contenuto dell'elemento che deve segnalare un nome e un ruolo corrispondente, non il relativo contenitore. L'elemento contenitore potrebbe segnalare che si tratta di un elemento con elementi figlio in una rappresentazione di Microsoft Automazione interfaccia utente, in modo che la logica assistive technology possa attraversarla. Tuttavia, gli utenti di assistive technology non devono in genere conoscere i contenitori e quindi la maggior parte dei contenitori non è denominata.

Ruolo e valore

I controlli e altri elementi dell'interfaccia utente che fanno parte del vocabolario XAML implementano Automazione interfaccia utente supporto per il ruolo di creazione di report e il valore come parte delle definizioni. È possibile usare Automazione interfaccia utente strumenti per esaminare le informazioni sul ruolo e sul valore per i controlli oppure leggere la documentazione relativa alle implementazioni automationPeer di ogni controllo. I ruoli disponibili in un framework Automazione interfaccia utente sono definiti nell'enumerazione AutomationControlType. Automazione interfaccia utente client come assistive technology possono ottenere informazioni sui ruoli chiamando metodi esposti dal framework Automazione interfaccia utente tramite AutomationPeer del controllo.

Non tutti i controlli hanno un valore. I controlli che hanno un valore segnalano queste informazioni per Automazione interfaccia utente tramite i peer e i modelli supportati da tale controllo. Ad esempio, un elemento modulo TextBox ha un valore. Una tecnologia di assistive può essere un client Automazione interfaccia utente e può scoprire che esiste un valore e qual è il valore. In questo caso specifico TextBox supporta il modello IValueProvider tramite le definizioni TextBoxAutomationPeer.

Nota

Nei casi in cui si usano AutomationProperties.Name o altre tecniche per fornire il nome accessibile in modo esplicito, non includere lo stesso testo usato dal ruolo di controllo o dalle informazioni sul tipo nel nome accessibile. Ad esempio, non includere stringhe come "button" o "list" nel nome. Le informazioni sul ruolo e sul tipo provengono da una proprietà Automazione interfaccia utente diversa (LocalizedControlType) fornita dal supporto predefinito del controllo per Automazione interfaccia utente. Molte tecnologie di assistive technology aggiungono LocalizedControlType al nome accessibile, quindi la duplicazione del ruolo nel nome accessibile può comportare parole inutilmente ripetute. Ad esempio, se si assegna a un controllo Button un nome accessibile di "pulsante" o si include "button" come ultima parte del nome, questa operazione potrebbe essere letta dalle utilità per la lettura dello schermo come "pulsante pulsante". È consigliabile testare questo aspetto delle informazioni di accessibilità usando l'Assistente vocale.

Influenza delle visualizzazioni ad albero Automazione interfaccia utente

Il framework Automazione interfaccia utente ha un concetto di visualizzazioni albero, in cui Automazione interfaccia utente client possono recuperare le relazioni tra gli elementi in un'interfaccia utente usando tre possibili visualizzazioni: raw, control e content. La visualizzazione dei controlli è la visualizzazione spesso usata dai client Automazione interfaccia utente perché offre una rappresentazione e un'organizzazione degli elementi in un'interfaccia utente interattiva. Gli strumenti di test consentono in genere di scegliere la visualizzazione albero da usare quando lo strumento presenta l'organizzazione degli elementi.

Per impostazione predefinita, qualsiasi classe derivata da Control e alcuni altri elementi verranno visualizzati nella visualizzazione controllo quando il framework Automazione interfaccia utente rappresenta l'interfaccia utente per un'app di Windows. Ma a volte non vuoi che un elemento venga visualizzato nella visualizzazione controlli a causa della composizione dell'interfaccia utente, in cui tale elemento duplica le informazioni o presenta informazioni non importanti per gli scenari di accessibilità. Usare la proprietà associata AutomationProperties.AccessibilityView per modificare la modalità di esposizione degli elementi alle visualizzazioni albero. Se si inserisce un elemento nell'albero Raw , la maggior parte delle tecnologie di assistive technology non segnala tale elemento come parte delle relative visualizzazioni. Per visualizzare alcuni esempi di come funziona nei controlli esistenti, aprire il file XAML di riferimento per la progettazione generic.xaml in un editor di testo e cercare AutomationProperties.AccessibilityView nei modelli.

Nome dal testo interno

Per semplificare l'uso di stringhe già presenti nell'interfaccia utente visibile per i valori dei nomi accessibili, molti dei controlli e altri elementi dell'interfaccia utente forniscono il supporto per determinare automaticamente un nome accessibile predefinito in base al testo interno all'interno dell'elemento o dai valori stringa delle proprietà del contenuto.

  • TextBlock, RichTextBlock, TextBox e RichTextBlock alzano di livello il valore della proprietà Text come nome accessibile predefinito.
  • Qualsiasi sottoclasse ContentControl usa una tecnica iterativa "ToString" per trovare le stringhe nel relativo valore Content e promuove queste stringhe come nome accessibile predefinito.

Nota

Come applicato da Automazione interfaccia utente, la lunghezza del nome accessibile non può essere maggiore di 2048 caratteri. Se una stringa utilizzata per la determinazione automatica del nome accessibile supera tale limite, il nome accessibile viene troncato a quel punto.

Nomi accessibili per le immagini

Per supportare le utilità per la lettura dello schermo e fornire le informazioni di identificazione di base per ogni elemento nell'interfaccia utente, a volte è necessario fornire alternative di testo a informazioni non testuali, ad esempio immagini e grafici (escludendo qualsiasi elemento puramente decorativo o strutturale). Questi elementi non hanno testo interno, quindi il nome accessibile non avrà un valore calcolato. È possibile impostare il nome accessibile direttamente impostando la proprietà associata AutomationProperties.Name come illustrato in questo esempio.

XAML

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

In alternativa, prendere in considerazione l'inclusione di un didascalia di testo visualizzato nell'interfaccia utente visibile e che funge anche da informazioni di accessibilità associate all'etichetta per il contenuto dell'immagine. Ecco un esempio:

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>

Etichette e LabeledBy

Il modo preferito per associare un'etichetta a un elemento del modulo consiste nell'usare un controllo TextBlock con un valore x:Name per il testo dell'etichetta e quindi impostare la proprietà associata AutomationProperties.LabeledBy nell'elemento del modulo per fare riferimento all'etichetta TextBlock in base al nome XAML. Se si usa questo modello, assistive technologies può usare il testo dell'etichetta come nome accessibile per il campo modulo. Ecco un esempio che illustra questa tecnica.

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>

Descrizione accessibile (facoltativo)

Una descrizione accessibile fornisce informazioni di accessibilità aggiuntive su un particolare elemento dell'interfaccia utente. In genere si fornisce una descrizione accessibile quando un nome accessibile da solo non comunica adeguatamente lo scopo di un elemento.

L'utilità per la lettura dello schermo dell'Assistente vocale legge la descrizione accessibile di un elemento solo quando l'utente richiede altre informazioni sull'elemento premendo CapsLock+F.

Il nome accessibile è progettato per identificare il controllo anziché documentarne completamente il comportamento. Se una breve descrizione non è sufficiente per spiegare il controllo, è possibile impostare la proprietà associata AutomationProperties.HelpText oltre a AutomationProperties.Name.

Test dell'accessibilità in anticipo e spesso

In definitiva, l'approccio migliore per supportare le utilità per la lettura dello schermo consiste nel testare l'app usando manualmente un'utilità per la lettura dello schermo. In questo modo verrà illustrato il comportamento dell'utilità per la lettura dello schermo e le informazioni di accessibilità di base che potrebbero non essere presenti nell'app. È quindi possibile modificare di conseguenza i valori della proprietà dell'interfaccia utente o Automazione interfaccia utente. Per altre info, vedi Test dell'accessibilità.

Uno degli strumenti che è possibile usare per testare l'accessibilità è denominato AccScope. Lo strumento AccScope è particolarmente utile perché è possibile visualizzare rappresentazioni visive dell'interfaccia utente che rappresentano il modo in cui le tecnologie di assistive technology potrebbero visualizzare l'app come albero di automazione. In particolare, è disponibile una modalità Assistente vocale che offre una visualizzazione del modo in cui l'Assistente vocale ottiene testo dall'app e come organizza gli elementi nell'interfaccia utente. AccScope è progettato in modo che possa essere usato e utile durante un ciclo di sviluppo per un'app, anche durante la fase di progettazione preliminare. Per altre informazioni, vedere AccScope.

Nomi accessibili da dati dinamici

Windows supporta molti controlli che possono essere usati per visualizzare i valori provenienti da un'origine dati associata, tramite una funzionalità nota come data binding. Quando si popolano elenchi con elementi di dati, potrebbe essere necessario usare una tecnica che imposta i nomi accessibili per gli elementi di elenco associati a dati dopo il popolamento dell'elenco iniziale. Per altre info, vedi "Scenario 4" nell'esempio di accessibilità XAML.

Nomi accessibili e localizzazione

Per assicurarsi che il nome accessibile sia anche un elemento localizzato, è consigliabile usare tecniche corrette per archiviare stringhe localizzabili come risorse e quindi fare riferimento alle connessioni di risorse con valori di direttiva x:Uid. Se il nome accessibile proviene da un utilizzo impostato in modo esplicito AutomationProperties.Name , assicurarsi che la stringa sia anche localizzabile.

Si noti che le proprietà associate, ad esempio le proprietà AutomationProperties , usano una sintassi speciale di qualificazione per il nome della risorsa, in modo che la risorsa faccia riferimento alla proprietà associata come applicata a un elemento specifico. Ad esempio, il nome della risorsa per AutomationProperties.Name applicato a un elemento dell'interfaccia utente denominato MediumButton è : MediumButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name.