如何在自定义应用程序中启用屏幕阅读器 "Browse Mode"?

How to enable Screenreader "Browse Mode" in a custom Application?

屏幕 reader 像 NVDA implement two modes of operation: Browse Mode and Focus Mode

在 NVDA 中,您通常可以使用 Insert+Space 在浏览和聚焦模式之间切换,然后通过声音确认。这适用于大多数应用程序:浏览器、Windows Explorer、Skype、VS Code。

但是,在我自己的 WPF 应用程序(例如,具有辅助功能标签)中,当我按下 Insert+Space 时,没有任何反应。 NVDA好像一直都是Focus Mode,没有Browse Mode

直觉上这是有道理的,因为对于浏览模式,屏幕reader 需要“知道”它应该读取哪些元素以及按什么顺序读取。

我不知道从哪里开始实施它。这是一个常见的 WPF 问题吗?是不是 NVDA 的问题,它需要知道应用程序是否支持浏览模式?

您是否可以在关闭无障碍编译器选项的情况下构建您的应用程序?以下是您可以检查的几项内容:

如果您在 Windows 上 运行 built-in 计算器应用程序,它与您的应用程序存在相同的问题。您始终处于表单模式,Ins+space 不会切换到浏览模式。但是,计算器应用程序中实际上没有任何“纯文本”可供阅读。每个元素都是一个交互元素。

但是,设置应用程序确实有一些纯文本,它也有同样的问题。我可以导航到所有交互元素,但我无法找到“从 Windows 中获得更多”文本或其下方的文本。从视觉上看,它看起来像是一个标题后跟一个段落,但切换到 NVDA 浏览模式不起作用。

这似乎是 NVDA 检测应用程序可访问性的方式:

Normally, NVDA uses the IAccessible2 API to get accessibility information from Chrome. With this embedded version of Chrome, NVDA seems to be unable to query the IAccessible2 interfaces and falls back to plain IAccessible/MSAA. I've seen this in embeded Chrome versions in Qt as well. Pretty sure it is a problem in the embedded version of Chrome.

来源:https://github.com/nvaccess/nvda/issues/13493