屏幕阅读器未读取WPF文本块内容

屏幕阅读器未读取WPF文本块内容,wpf,xaml,accessibility,screen-readers,Wpf,Xaml,Accessibility,Screen Readers,我有一个包含自定义WPF窗口的应用程序,用于显示类似Win32 MessageBox的弹出窗口 作为要求的一部分,应用程序必须能够通过屏幕阅读器,特别是JAWS进行访问。我在让屏幕阅读器读取对话框中的文本时遇到问题,但它将读取按钮ok中的值 XAML中的代码如下所示 <Window x:Class="UserControls.ModalDialog" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentat

我有一个包含自定义WPF窗口的应用程序,用于显示类似Win32 MessageBox的弹出窗口

作为要求的一部分,应用程序必须能够通过屏幕阅读器,特别是JAWS进行访问。我在让屏幕阅读器读取对话框中的文本时遇到问题,但它将读取按钮ok中的值

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之后的下一个元素,屏幕阅读器将正确读取对话框文本,尽管这两个控件没有显式链接,但我不能在控件中添加这样的额外控件,因为它会影响布局


有没有一种方法可以让屏幕阅读器在控件中没有列表视图的情况下正确读取文本块文本?

似乎WPF仍然没有为所有屏幕阅读器提供完全支持。我在网上搜索过,最初只发现了未回答的类似问题:

继续之后,我发现有一个读卡器似乎可以使用WPF:NVDA。要了解更多信息,请查看该页面。我从以下问题中发现了这一点:

此外,似乎需要将通常为WPF UI自动化保留的x:Uid属性设置为要读取的字符串。我从以下问题中发现了这一点:


最后,您可以在Dev Pro网站上的中找到一个有用的教程,用于在WPF应用程序中提供可访问性。

我可以通过在运行TextBlock时为AutomationProperties.HelpText属性提供一个值,并在加载窗口后关注TextBlock来解决此问题。

嗨,Sheridan,感谢您的回复,不幸的是,客户使用Jaws,因此更改正在使用的屏幕阅读器不是一个选项。我还尝试在文本块上设置自动化属性,但没有成功,我发现这与应用程序中的其他地方不一样,我在行为正确的UIElements上设置了自动化属性。我将继续努力。运行时是否会暴露HelpText属性?