我正在编写一个WPF(.net 5(应用程序,它应该支持可访问性,特别是windows叙述者来读取屏幕文本。我使用了几个TextBlock
,希望一旦窗口显示,叙述者就会开始逐一阅读屏幕上的所有文本。
我观察到,当Button
的内容被读出时,任何TextBlock
的内容都根本没有被叙述者读出。
我如何才能让叙述者一个接一个地阅读窗口的所有内容。
<Window x:Class="SampleApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:SampleApp"
mc:Ignorable="d"
TabIndex="0"
Focusable="True"
Title="MainWindow" Height="450" Width="800">
<Grid>
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock x:Name="firstText"
Text="This is the first line"
KeyboardNavigation.TabIndex="1"
KeyboardNavigation.TabNavigation="Continue"
AutomationProperties.AutomationId="firstTextBox"
AutomationProperties.Name="This is the first line"
/>
<TextBlock x:Name="secondText"
Text="This is the second line"
KeyboardNavigation.TabIndex="2"
KeyboardNavigation.TabNavigation="Continue"
AutomationProperties.AutomationId="secondTextBox"
AutomationProperties.Name="This is the second line"
/>
</StackPanel>
</Grid>
</Window>
这是我使用的一种风格,当"讲述人"打开时,可以使每个文本块聚焦,但当"讲述者"关闭时,不会创建一堆额外的选项卡停止。
<!-- WCAG variant -->
<Style x:Key="WCAG_TextboxStyle" TargetType="{x:Type TextBlock}"
BasedOn="{StaticResource {x:Type TextBlock}}" >
<Setter Property="KeyboardNavigation.IsTabStop" Value="False"/>
<Setter Property="Focusable" Value="False"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsNarratorOn}" Value="true">
<Setter Property="KeyboardNavigation.IsTabStop" Value="True"/>
<Setter Property="Focusable" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>