c# - Hacer que la aplicación WPF sea accesible al lector de pantalla
xaml accessibility (1)
Puedes hacer prácticamente todo lo que necesites usando las propiedades de automatización
Por ejemplo;
Consulte la documentación para más detalles sobre el uso. Algo sorprendido de que esto no haya sido respondido ahora, considerando la cantidad de upvotes. De cualquier manera, espero que esto ayude. ¡Aclamaciones!
Tengo una aplicación WPF y parte de los requisitos es que sea accesible, incluida la navegación con teclado y los lectores de pantalla.
He tenido cierto éxito con un Treeview en la aplicación al configurar AutomationProperties.Name en el ItemContainerStyle del Treeview, pero tengo problemas con una ventana que contiene un área de texto y algunos botones.
ZoomText leerá correctamente el Título de la ventana, pero lo hará dos veces, así como el texto en los botones, pero no puedo hacer que lea el contenido del TextBlock.
El bloque de texto se define en una ventana como abajo. No se muestran errores de enlace en la salida de Visual Studio durante la depuración, y el lector de pantalla NVDA puede leer el contenido correctamente, aunque esto no es lo suficientemente bueno para mí ya que el cliente usa ZoomText.
<Window x:Class="UserControls.ModalDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="160" d:DesignWidth="400" MinHeight="85" MinWidth="400" MaxWidth="400" SizeToContent="Height" Height="Auto"
WindowStartupLocation="CenterScreen" ResizeMode="NoResize" Title="{Binding TitleText }">
<DockPanel Width="Auto" Margin="20,20,0,10">
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=DialogText, Mode=TwoWay}" Cursor="Arrow" Focusable="True" TextWrapping="WrapWithOverflow"
Height="Auto" Width="325" TextOptions.TextFormattingMode="Display"
ToolTip="{Binding Path=Text, RelativeSource={RelativeSource Self}}"
AutomationProperties.Name="{Binding Path=Text, RelativeSource={RelativeSource Self}}"
AutomationProperties.AutomationId="{Binding Path=Text, RelativeSource={RelativeSource Self}}">
</TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,10,5,0">
<Button Content="{Binding Path=Option1ButtonText, Mode=TwoWay}" Padding="5,0,5,0" Margin="0,20,5,0" MinWidth="100" IsDefault="True" Command="{Binding Path=Option1ButtonCommand, Mode=TwoWay}" />
<Button Content="{Binding Path=Option2ButtonText, Mode=TwoWay}" Padding="5,0,5,0" Margin="2,20,10,0" MinWidth="75" Command="{Binding Path=Option2ButtonCommand, Mode=TwoWay}" Visibility="{Binding Option2ButtonVisibility, Mode=TwoWay}"/>
<Button Content="{Binding Path=CancelButtonText, Mode=TwoWay}" Padding="5,0,5,0" Margin="2,20,10,0" MinWidth="75" IsCancel="True" Visibility="{Binding CancelButtonVisibility, Mode=TwoWay}"/>
</StackPanel>
</StackPanel>
</DockPanel>
Si alguien ha tenido algún éxito con WPF y lectores de pantalla y tiene alguna idea, o puede indicarme la dirección correcta, sería genial.
Actualizar:
Parece que el problema es porque el TextBlock está dentro de otro elemento. Si la ventana tiene el TextBlock ya que es solo un elemento, el lector de pantalla lee el texto correctamente. Sin embargo, necesito los paneles Dock y Stack para el diseño, así que necesito encontrar una manera de hacer que el lector de pantalla funcione cuando el TextBlock no es el único contenido en la ventana.