我有一个包含自定义WPF Windows的应用程序,用于显示类似于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控件添加到Window中,作为TextBlock之后的下一个元素,屏幕阅读器会正确读取对话框文本,尽管两个控件没有明确链接,但是我无法在此处进行额外的控制。控制,因为它会影响布局。
有没有办法让屏幕阅读器在没有控件中的列表视图的情况下正确读取TextBlock文本?
答案 0 :(得分:2)
似乎WPF仍然不能为所有屏幕阅读器提供全面支持。我在网上搜索过,最初只找到了未回答的类似问题:
WPF: how to make the Screen reader to read the text from a TextBox
继续之后,我发现有一个读者确实可以使用WPF:NVDA。要了解更多信息,请查看NVDA Community页面。我从以下问题中找到了这个:
Screenreader (NVDA) only reads WPF Window-Title
此外,似乎您需要将x:Uid
属性(通常为WPF UI自动保留)设置为要读出的字符串。我从以下问题中找到了这个:
How-to for making my WPF app screen reader compatible?
最后,您可以在Dev Pro网站的How to Code WPF Applications for Accessibility找到有用的教程,以便在WPF应用程序中提供辅助功能。
答案 1 :(得分:2)
我能够通过在AutomationProperties.HelpText
的{{1}}上为Run
属性赋值并在窗口加载后关注TextBlock
来解决此问题。
答案 2 :(得分:1)
在 TextBlock 上将 Focusable 设置为 true 对我有用