我有一个包含自定义 WPF 窗口的应用程序,用于显示类似于 Win32 MessageBox 的弹出窗口。
作为要求的一部分,应用程序必须可通过屏幕阅读器(特别是 JAWS)访问。我在让屏幕阅读器读出对话框中的文本时遇到问题,但它会正常读取按钮中的值。
XAML中的代码如下
<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"
xmlns:converters="clr-namespace:UserControls.Converters"
mc:Ignorable="d"
d:DesignHeight="160" d:DesignWidth="400" MinHeight="85" MinWidth="400" MaxWidth="400" SizeToContent="Height" Height="Auto"
WindowStartupLocation="CenterScreen" ResizeMode="NoResize" Title="Popup Dialog">
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<StackPanel.Resources>
<converters:DisplayIconToSystemIconConverter x:Key="DisplayIconToSystemIconConverter"/>
</StackPanel.Resources>
<Image Source="{Binding IconType, Converter={StaticResource DisplayIconToSystemIconConverter}}" Height="32" Width="32" Margin="0,0,10,0"/>
<TextBlock Name="TextBlock" Margin="20,10,0,0" TextWrapping="Wrap" Width="350" Foreground="DarkSlateGray" FontSize="10" FontWeight="Normal">
<Run Text="Some text in the dialog"/>
</TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,10,5,0">
<Button Name="Option1Button" Content="OK" Padding="5,0,5,0" Margin="0,20,5,0" MinWidth="100" IsDefault="True" />
<Button Cancel Padding="5,0,5,0" Margin="2,20,10,0" MinWidth="75" IsCancel="True" Visibility="Visible"/>
</StackPanel>
</StackPanel></Window>
此代码在调用时正确显示弹出窗口,但屏幕阅读器仅读取标题两次。
如果我将一个空的 ListView 控件添加到窗口中作为 TextBlock 之后的下一个元素,则屏幕阅读器会正确读取对话框文本,尽管这两个控件没有显式链接,但我不能在控件中拥有像这样的额外控件,因为它会影响布局。
有没有办法让屏幕阅读器正确读取 TextBlock 文本,而无需在控件中也使用列表视图?