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只读取重点内容,除非用户告诉它阅读页面上的所有内容)。
答案 0 :(得分:0)
您可以在用户控件上设置AutomationProperties.Name =“”。 您还可以覆盖用户控件的OnCreateAutomationPeer方法以返回null。