cof*_*der 20 c# wpf xaml accessibility screen-readers
我有一个WPF应用程序,部分要求是可访问的,包括键盘导航和屏幕阅读器.
通过在Treeview的ItemContainerStyle中设置AutomationProperties.Name,我在应用程序中使用Treeview取得了一些成功,但是我遇到了包含文本区域和一些按钮的Window的问题.
ZoomText将正确读出窗口的标题,但是这样做了两次,以及按钮中的文本,但是我无法读取它以读取TextBlock的内容.
Text块在如下窗口中定义.在调试时,Visual Studio输出中没有显示绑定错误,NVDA屏幕阅读器可以正确读取内容,尽管这对我来说不够好,因为客户使用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>
Run Code Online (Sandbox Code Playgroud)
如果有人在WPF和屏幕阅读器上取得任何成功并且有任何见解,或者可以指出我正确的方向,那将是很棒的.
更新:
似乎问题是因为TextBlock在另一个元素中.如果窗口具有TextBlock作为唯一元素,则屏幕阅读器会正确读取文本.但是我需要Dock和Stack Panels进行布局,所以当TextBlock不是窗口中的唯一内容时,我需要找到一种方法让Screen阅读器工作.