C# 使屏幕阅读器可以访问WPF应用程序

C# 使屏幕阅读器可以访问WPF应用程序,c#,wpf,xaml,accessibility,screen-readers,C#,Wpf,Xaml,Accessibility,Screen Readers,我有一个WPF应用程序,部分要求是它可以访问,包括键盘导航和屏幕阅读器 通过在Treeview的ItemContainerStyle中设置AutomationProperties.Name,我在应用程序中使用Treeview取得了一些成功,但是我在包含文本区域和一些按钮的窗口中遇到了问题 ZoomText将正确读取窗口的标题,但执行两次,以及按钮中的文本,但我无法让它读取TextBlock的内容 文本块在窗口中定义如下。调试时Visual Studio输出中没有显示绑定错误,NVDA屏幕阅读器可

我有一个WPF应用程序,部分要求是它可以访问,包括键盘导航和屏幕阅读器

通过在Treeview的ItemContainerStyle中设置AutomationProperties.Name,我在应用程序中使用Treeview取得了一些成功,但是我在包含文本区域和一些按钮的窗口中遇到了问题

ZoomText将正确读取窗口的标题,但执行两次,以及按钮中的文本,但我无法让它读取TextBlock的内容

文本块在窗口中定义如下。调试时Visual Studio输出中没有显示绑定错误,NVDA屏幕阅读器可以正确读取内容,尽管这对我来说不够好,因为客户使用ZoomText

<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"
         mc:Ignorable="d" 
         d:DesignHeight="160" d:DesignWidth="400" MinHeight="85" MinWidth="400" MaxWidth="400" SizeToContent="Height" Height="Auto"
        WindowStartupLocation="CenterScreen" ResizeMode="NoResize" Title="{Binding TitleText }">
<DockPanel Width="Auto" Margin="20,20,0,10">
    <StackPanel Orientation="Vertical">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding Path=DialogText, Mode=TwoWay}" Cursor="Arrow" Focusable="True" TextWrapping="WrapWithOverflow"  
                       Height="Auto" Width="325" TextOptions.TextFormattingMode="Display"
                       ToolTip="{Binding Path=Text, RelativeSource={RelativeSource Self}}"
                       AutomationProperties.Name="{Binding Path=Text, RelativeSource={RelativeSource Self}}"
                       AutomationProperties.AutomationId="{Binding Path=Text, RelativeSource={RelativeSource Self}}">
            </TextBlock>
        </StackPanel>

        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,10,5,0">
            <Button Content="{Binding Path=Option1ButtonText, Mode=TwoWay}" Padding="5,0,5,0" Margin="0,20,5,0" MinWidth="100" IsDefault="True" Command="{Binding Path=Option1ButtonCommand, Mode=TwoWay}" />
            <Button Content="{Binding Path=Option2ButtonText, Mode=TwoWay}" Padding="5,0,5,0"  Margin="2,20,10,0" MinWidth="75" Command="{Binding Path=Option2ButtonCommand, Mode=TwoWay}" Visibility="{Binding Option2ButtonVisibility, Mode=TwoWay}"/>
            <Button Content="{Binding Path=CancelButtonText, Mode=TwoWay}" Padding="5,0,5,0"  Margin="2,20,10,0" MinWidth="75" IsCancel="True" Visibility="{Binding CancelButtonVisibility, Mode=TwoWay}"/>
        </StackPanel>
    </StackPanel>
</DockPanel>

如果有人在WPF和屏幕阅读器方面取得了任何成功,并且有任何见解,或者可以为我指出正确的方向,那就太好了

更新:


问题似乎是因为TextBlock位于另一个元素中。如果窗口中只有TextBlock元素,屏幕阅读器将正确读取文本。但是,我需要Dock和Stack面板来进行布局,所以我需要找到一种方法,当TextBlock不是窗口中的唯一内容时,让屏幕阅读器工作。

使用

比如,


有关用法的更多详细信息,请参阅文档。令人惊讶的是,考虑到投票的数量,这个问题现在还没有得到回答。不管怎样,希望这有帮助。干杯

让我们等待专家,但当我挖掘这个时,我没有找到使WPF应用程序完全可访问的方法(例如,可以使用WinForms)。您无法在其viewmodel中读取“DialogText”属性,或者当用户尝试增加您的TextBlock时,您的“TextBlock”没有调整大小?可能是重复的