如何使JAWS以与Window相同的方式读取UserControl的内容?

时间:2016-01-27 17:39:22

标签: wpf accessibility jaws-screen-reader

JAWS(屏幕阅读器)以不同于窗口内容的方式处理WPF用户控件的内容。用户第一次选中用户控件中的可聚焦元素时,JAWS会读取用户控件的全部内容,而不是仅读取聚焦元素。在窗口上,当用户选中控件时,JAWS只读取聚焦控件。如何让用户控件的行为与窗口一样?

考虑以下XAML(为简洁省略了名称空间/设计器声明):

<Window ... Title="MainWindow">
    <StackPanel>
        <Label>First label</Label>
        <Button>A button</Button>
        <Label>Second label</Label>
        <CheckBox>A checkbox</CheckBox>
    </StackPanel>
</Window>

当启动上述WPF应用程序时,JAWS会读取“主窗口”。如果用户按下 Tab ,则第一个按钮被聚焦,JAWS读取“Tab A按钮按钮以激活按空格键”。这是预期的。

现在考虑将上述控件包装到用户控件中:

<UserControl ...>
    <StackPanel>
        <Label>First label</Label>
        <Button>A button</Button>
        <Label>Second label</Label>
        <CheckBox>A checkbox</CheckBox>
    </StackPanel>
</UserControl>

然后将用户控件放在MainWindow上以替换其他控件:

<Window ... Title="MainWindow">
    <uc:FirstUserControl/>
</Window>

现在,当应用程序启动时,JAWS读取相同的内容(“主窗口”),但是当用户按下 Tab 时,JAWS会读取:“选项卡第一个标签第二个标签A按钮激活按下空格键“。如果用户再次按 Tab ,则复选框将获得焦点,但JAWS不会重新读取所有内容 - 它只会按预期读取复选框标签。第三次按 Tab 将循环回按钮,这次JAWS只读取聚焦按钮文本。它似乎只在子控件第一次获得焦点时才读取用户控件的全部内容。

如何使用户控件的内容与普通窗口上的控件的行为相同? (也就是说,我希望JAWS只读取重点内容,除非用户告诉它阅读页面上的所有内容)。

1 个答案:

答案 0 :(得分:0)

您可以在用户控件上设置AutomationProperties.Name =“”。 您还可以覆盖用户控件的OnCreateAutomationPeer方法以返回null。