JAWS 屏幕 reader 在选择第一个单元格时读出 WPF 应用程序中的所有 TextBlock
JAWS screen reader reads off all TextBlocks in WPF application when first cell is selected
We are building a 508 compliant WPF application and testing it with JAWS 18, and one thing we found was that TextBlocks in every cell of the same Grid are being read off back to back when the first item is selected.此外,如果您使用 'shift' + 'tab' 向后移动选择,它也不起作用,只有当您单独使用 'tab' 并向前移动时。我通过在列和行中使用 Grid 和 TextBlocks 并选择左上角的单元格制作示例应用程序来测试它是否以某种方式 属性 网格,这并没有使 JAWS 读取网格上的所有项目。所以我不认为它是WPF中Grid的一般属性。我想禁用此功能。
<ScrollViewer>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/> //More of these
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Row="0"
Grid.Column="0"
Style="{StaticResource FacilityDetailsStackPanelStyle}"
Visibility="{Binding SelectedContact.FirstName, Converter={StaticResource StringToVisibilityConverter}}">
<TextBlock Text="{Binding Source={StaticResource ApplicationSettings}, Path=ContactNameLabelText}"/>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} {1}">
<Binding Path="SelectedContact.FirstName"/>
<Binding Path="SelectedContact.LastName"/>
</MultiBinding>
</TextBlock.Text>
<AutomationProperties.Name>
<MultiBinding StringFormat="{}{0} {1} {2}">
<Binding Source="{StaticResource ApplicationSettings}" Path="ContactNameText"/>
<Binding Path="SelectedContact.FirstName"/>
<Binding Path="SelectedContact.LastName"/>
</MultiBinding>
</AutomationProperties.Name>
</TextBlock>
</StackPanel>
<StackPanel Grid.Row="1"
Grid.Column="0"
Style="{StaticResource FacilityDetailsStackPanelStyle}"
Visibility="{Binding Path=SelectedContact.JobTitle, Converter={StaticResource StringToVisibilityConverter}}">
<TextBlock Text="{Binding Source={StaticResource ApplicationSettings}, Path=ContactJobTitleLabelText}"/>
<TextBlock Text="{Binding SelectedContact.JobTitle}">
<AutomationProperties.Name>
<MultiBinding StringFormat="{}{0} {1}">
<Binding Source="{StaticResource ApplicationSettings}" Path="ContactJobTitleText"/>
<Binding Path="SelectedContact.JobTitle"/>
</MultiBinding>
</AutomationProperties.Name>
</TextBlock>
</StackPanel>
<Grid/> //After all the same type of StackPanel/TextBlock structure.
<ScrollViewer/>
SelectedContact 是一个联系人业务 class,它是通过绑定到 DataGrid 上的 SelectedItem 属性 选择的,其中 ItemsSource 是一个联系人对象列表。
网格被包裹在 ScrollViewer 中,但我将其注释掉并且函数没有任何变化。 编辑: 注释掉 ScrollViewer 的函数没有变化,但是向所述 ScrollViewer 添加 AutomationProperties.Name
是解决问题的方法。
我们通过将 AutomationProperties.Name
属性 添加到包装 Grid 的 ScrollViewer 来找到解决方案。当我们进入 ScrollViewer 时,它现在会读出我们绑定到的文本。
We are building a 508 compliant WPF application and testing it with JAWS 18, and one thing we found was that TextBlocks in every cell of the same Grid are being read off back to back when the first item is selected.此外,如果您使用 'shift' + 'tab' 向后移动选择,它也不起作用,只有当您单独使用 'tab' 并向前移动时。我通过在列和行中使用 Grid 和 TextBlocks 并选择左上角的单元格制作示例应用程序来测试它是否以某种方式 属性 网格,这并没有使 JAWS 读取网格上的所有项目。所以我不认为它是WPF中Grid的一般属性。我想禁用此功能。
<ScrollViewer>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/> //More of these
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Row="0"
Grid.Column="0"
Style="{StaticResource FacilityDetailsStackPanelStyle}"
Visibility="{Binding SelectedContact.FirstName, Converter={StaticResource StringToVisibilityConverter}}">
<TextBlock Text="{Binding Source={StaticResource ApplicationSettings}, Path=ContactNameLabelText}"/>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} {1}">
<Binding Path="SelectedContact.FirstName"/>
<Binding Path="SelectedContact.LastName"/>
</MultiBinding>
</TextBlock.Text>
<AutomationProperties.Name>
<MultiBinding StringFormat="{}{0} {1} {2}">
<Binding Source="{StaticResource ApplicationSettings}" Path="ContactNameText"/>
<Binding Path="SelectedContact.FirstName"/>
<Binding Path="SelectedContact.LastName"/>
</MultiBinding>
</AutomationProperties.Name>
</TextBlock>
</StackPanel>
<StackPanel Grid.Row="1"
Grid.Column="0"
Style="{StaticResource FacilityDetailsStackPanelStyle}"
Visibility="{Binding Path=SelectedContact.JobTitle, Converter={StaticResource StringToVisibilityConverter}}">
<TextBlock Text="{Binding Source={StaticResource ApplicationSettings}, Path=ContactJobTitleLabelText}"/>
<TextBlock Text="{Binding SelectedContact.JobTitle}">
<AutomationProperties.Name>
<MultiBinding StringFormat="{}{0} {1}">
<Binding Source="{StaticResource ApplicationSettings}" Path="ContactJobTitleText"/>
<Binding Path="SelectedContact.JobTitle"/>
</MultiBinding>
</AutomationProperties.Name>
</TextBlock>
</StackPanel>
<Grid/> //After all the same type of StackPanel/TextBlock structure.
<ScrollViewer/>
SelectedContact 是一个联系人业务 class,它是通过绑定到 DataGrid 上的 SelectedItem 属性 选择的,其中 ItemsSource 是一个联系人对象列表。
网格被包裹在 ScrollViewer 中,但我将其注释掉并且函数没有任何变化。 编辑: 注释掉 ScrollViewer 的函数没有变化,但是向所述 ScrollViewer 添加 AutomationProperties.Name
是解决问题的方法。
我们通过将 AutomationProperties.Name
属性 添加到包装 Grid 的 ScrollViewer 来找到解决方案。当我们进入 ScrollViewer 时,它现在会读出我们绑定到的文本。