Exponer información básica de accesibilidad
La información de accesibilidad básica suele clasificarse en nombre, rol y valor. En este tema se describe el código para ayudar a la aplicación a exponer la información básica que necesitan las tecnologías de asistencia.
Nombre accesible
Un nombre accesible es una cadena de texto breve y descriptiva que un lector de pantalla usa para anunciar un elemento de interfaz de usuario. Establezca el nombre accesible para los elementos de la interfaz de usuario de modo que tenga un significado que sea importante para comprender el contenido o interactuar con la interfaz de usuario. Estos elementos suelen incluir imágenes, campos de entrada, botones, controles y regiones.
En esta tabla se describe cómo definir u obtener un nombre accesible para varios tipos de elementos en una interfaz de usuario XAML.
Tipo de elemento | Descripción |
---|---|
Texto estático | Para los elementos TextBlock y RichTextBlock, un nombre accesible se determina automáticamente a partir del texto visible (interno). Todo el texto de ese elemento se usa como nombre. Consulte Nombre del texto interno. |
Imágenes | El elemento Imagen XAML no tiene un análogo directo al atributo alternativo HTML de img y elementos similares. Use AutomationProperties.Name para proporcionar un nombre o use la técnica de título. Consulte Nombres accesibles para imágenes. |
Elementos de formulario | El nombre accesible de un elemento de formulario debe ser el mismo que la etiqueta que se muestra para ese elemento. Consulte Etiquetas y LabeledBy. |
Botones y vínculos | De forma predeterminada, el nombre accesible de un botón o vínculo se basa en el texto visible, con las mismas reglas que se describen en Nombre del texto interno. En los casos en los que un botón solo contiene una imagen, use AutomationProperties.Name para proporcionar un equivalente de solo texto de la acción prevista del botón. |
La mayoría de los elementos de contenedor, como los paneles, no promueven su contenido como nombre accesible. Esto se debe a que es el contenido del elemento que debe notificar un nombre y un rol correspondiente, no su contenedor. El elemento contenedor puede informar de que es un elemento que tiene elementos secundarios en una representación de Microsoft Automatización de la interfaz de usuario, de modo que la lógica de tecnología de asistencia pueda atravesarlo. Pero los usuarios de tecnologías de asistencia no suelen necesitar conocer los contenedores y, por tanto, la mayoría de los contenedores no tienen nombre.
Rol y valor
Los controles y otros elementos de la interfaz de usuario que forman parte del vocabulario XAML implementan Automatización de la interfaz de usuario compatibilidad con el rol y el valor de informes como parte de sus definiciones. Puede usar herramientas de Automatización de la interfaz de usuario para examinar la información de rol y valor de los controles, o bien puede leer la documentación de las implementaciones de AutomationPeer de cada control. Los roles disponibles en un marco de Automatización de la interfaz de usuario se definen en la enumeración AutomationControlType. Automatización de la interfaz de usuario clientes como las tecnologías de asistencia pueden obtener información de roles llamando a métodos que expone el marco de Automatización de la interfaz de usuario mediante automationPeer del control.
No todos los controles tienen un valor. Los controles que tienen un valor informan de esta información para Automatización de la interfaz de usuario a través de los pares y patrones admitidos por ese control. Por ejemplo, un elemento de formulario TextBox tiene un valor. Una tecnología de asistencia puede ser un cliente Automatización de la interfaz de usuario y puede detectar tanto que existe un valor como cuál es el valor. En este caso específico, TextBox admite el patrón IValueProvider a través de las definiciones TextBoxAutomationPeer.
Nota:
En los casos en los que use AutomationProperties.Name u otras técnicas para proporcionar explícitamente el nombre accesible, no incluya el mismo texto que usa el rol de control o la información de tipo en el nombre accesible. Por ejemplo, no incluya cadenas como "button" o "list" en el nombre. La información de rol y tipo procede de una propiedad de Automatización de la interfaz de usuario diferente (LocalizedControlType) proporcionada por la compatibilidad de control predeterminada para Automatización de la interfaz de usuario. Muchas tecnologías de asistencia anexan LocalizedControlType al nombre accesible, por lo que duplicar el rol en el nombre accesible puede dar lugar a palabras repetidas innecesariamente. Por ejemplo, si asigna un control Button a un nombre accesible de "button" o incluye "button" como la última parte del nombre, es posible que los lectores de pantalla lo lean como "botón". Debe probar este aspecto de la información de accesibilidad mediante Narrador.
Influencia de las vistas de árbol de Automatización de la interfaz de usuario
El marco de trabajo de Automatización de la interfaz de usuario tiene un concepto de vistas de árbol, donde Automatización de la interfaz de usuario clientes pueden recuperar las relaciones entre los elementos de una interfaz de usuario con tres vistas posibles: sin procesar, control y contenido. La vista de control es la vista que a menudo usan los clientes de Automatización de la interfaz de usuario porque proporciona una buena representación y organización de los elementos de una interfaz de usuario que son interactivas. Las herramientas de prueba normalmente permiten elegir la vista de árbol que se va a usar cuando la herramienta presenta la organización de elementos.
De forma predeterminada, cualquier clase derivada de Control y algunos otros elementos aparecerán en la vista de control cuando el marco de Automatización de la interfaz de usuario representa la interfaz de usuario de una aplicación de Windows. Pero a veces no desea que un elemento aparezca en la vista de control debido a la composición de la interfaz de usuario, donde ese elemento duplica información o presenta información que no es importante para escenarios de accesibilidad. Use la propiedad adjunta AutomationProperties.AccessibilityView para cambiar cómo se exponen los elementos a las vistas de árbol. Si coloca un elemento en el árbol Raw , la mayoría de las tecnologías de asistencia no notificarán ese elemento como parte de sus vistas. Para ver algunos ejemplos de cómo funciona en los controles existentes, abra el archivo XAML de referencia de diseño generic.xaml en un editor de texto y busque AutomationProperties.AccessibilityView en las plantillas.
Nombre del texto interno
Para facilitar el uso de cadenas que ya existen en la interfaz de usuario visible para los valores de nombre accesibles, muchos de los controles y otros elementos de la interfaz de usuario proporcionan compatibilidad para determinar automáticamente un nombre accesible predeterminado en función del texto interno dentro del elemento o de valores de cadena de propiedades de contenido.
- TextBlock, RichTextBlock, TextBox y RichTextBlock promueven cada uno el valor de la propiedad Text como nombre accesible predeterminado.
- Cualquier subclase ContentControl usa una técnica iterativa "ToString" para buscar cadenas en su valor content y promueve estas cadenas como el nombre accesible predeterminado.
Nota:
Como aplica Automatización de la interfaz de usuario, la longitud del nombre accesible no puede tener más de 2048 caracteres. Si una cadena usada para la determinación automática del nombre accesible supera ese límite, el nombre accesible se trunca en ese momento.
Nombres accesibles para imágenes
Para admitir lectores de pantalla y proporcionar la información básica de identificación de cada elemento de la interfaz de usuario, a veces debe proporcionar alternativas de texto a información no textual, como imágenes y gráficos (excepto cualquier elemento puramente decorativo o estructural). Estos elementos no tienen texto interno, por lo que el nombre accesible no tendrá un valor calculado. Puede establecer el nombre accesible directamente estableciendo la propiedad adjunta AutomationProperties.Name como se muestra en este ejemplo.
XAML
<!-- Comment -->
<Image Source="product.png"
AutomationProperties.Name="An image of a customer using the product."/>
Como alternativa, considere la posibilidad de incluir un título de texto que aparezca en la interfaz de usuario visible y que también actúe como información de accesibilidad asociada a la etiqueta para el contenido de la imagen. Este es un ejemplo:
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>
Etiquetas y LabeledBy
La manera preferida de asociar una etiqueta a un elemento de formulario es usar un TextBlock con un x:Name para el texto de etiqueta y, a continuación, establecer la propiedad adjunta AutomationProperties.LabeledBy en el elemento de formulario para hacer referencia al textBlock de etiquetado por su nombre XAML. Si usa este patrón, las tecnologías de asistencia pueden usar el texto de la etiqueta como nombre accesible para el campo de formulario. Este es un ejemplo que muestra esta 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>
Descripción accesible (opcional)
Una descripción accesible proporciona información de accesibilidad adicional sobre un elemento de interfaz de usuario determinado. Normalmente, se proporciona una descripción accesible cuando un nombre accesible por sí solo no transmite adecuadamente el propósito de un elemento.
El lector de pantalla narrador lee la descripción accesible de un elemento solo cuando el usuario solicita más información sobre el elemento presionando CapsLock+F.
El nombre accesible está diseñado para identificar el control en lugar de documentar completamente su comportamiento. Si una breve descripción no es suficiente para explicar el control, puede establecer la propiedad adjunta AutomationProperties.HelpText además de AutomationProperties.Name.
Probar la accesibilidad temprano y a menudo
En última instancia, el mejor enfoque para admitir lectores de pantalla es probar la aplicación con un lector de pantalla usted mismo. Esto te mostrará cómo se comporta el lector de pantalla y qué información básica de accesibilidad podría faltar en la aplicación. A continuación, puede ajustar los valores de la interfaz de usuario o Automatización de la interfaz de usuario propiedad en consecuencia. Para obtener más información, consulta Pruebas de accesibilidad.
Una de las herramientas que puede usar para probar la accesibilidad se denomina AccScope. La herramienta AccScope es especialmente útil porque puede ver representaciones visuales de la interfaz de usuario que representan cómo las tecnologías de asistencia pueden ver la aplicación como un árbol de automatización. En concreto, hay un modo Narrador que ofrece una vista de cómo Narrador obtiene texto de la aplicación y cómo organiza los elementos de la interfaz de usuario. AccScope está diseñado para que se pueda usar y ser útil durante un ciclo de desarrollo para una aplicación, incluso durante la fase de diseño preliminar. Para obtener más información, consulta AccScope.
Nombres accesibles a partir de datos dinámicos
Windows admite muchos controles que se pueden usar para mostrar valores procedentes de un origen de datos asociado, a través de una característica conocida como enlace de datos. Al rellenar listas con elementos de datos, es posible que tenga que usar una técnica que establezca nombres accesibles para los elementos de lista enlazados a datos después de rellenar la lista inicial. Para obtener más información, consulta "Escenario 4" en el ejemplo de accesibilidad XAML.
Nombres y localización accesibles
Para asegurarse de que el nombre accesible también es un elemento localizado, debe usar técnicas correctas para almacenar cadenas localizables como recursos y, a continuación, hacer referencia a las conexiones de recursos con valores de directiva x:Uid. Si el nombre accesible procede de un uso de AutomationProperties.Name establecido explícitamente, asegúrese de que la cadena también es localizable.
Tenga en cuenta que las propiedades adjuntas, como las propiedades AutomationProperties , usan una sintaxis de calificación especial para el nombre del recurso, de modo que el recurso haga referencia a la propiedad adjunta como aplicada a un elemento específico. Por ejemplo, el nombre del recurso para AutomationProperties.Name tal como se aplica a un elemento de interfaz de usuario denominado MediumButton
es: MediumButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name
.