【问题标题】:Make Custom WinForms Control Work with Narrator (Accessibility)使自定义 WinForms 控件与讲述人一起使用(辅助功能)
【发布时间】:2012-06-02 21:08:27
【问题描述】:

我有一个从 Control 类派生的自定义列表控件。

我需要通过MSAA (Microsoft Active Accessibility) 让残障人士可以访问它。

到目前为止,我知道我需要创建从 ControlAccessibleObject 继承的类,然后在 Control.CreateAccessibilityInstance 方法覆盖中返回其实例。

问题是我已经实现了这个,它似乎不适用于 Windows 讲述人工具。

例如,当我单击标准 ListView 中的某个项目时,讲述人会说出所选项目的文本。

但是当我点击控件中的项目时,什么也没有发生(尽管在我的 ControlAccessibleObject 实现中请求了项目文本)

我认为我也需要实现 IAccessible,但我查看了 .NET 参考源代码,ListView 没有实现这个接口。我想这可能是在包装的 Win32 控件中实现的,所以我看了一下类似的控件——DataGridView——但这也没有实现 IAccessible。

DataGridView 有辅助功能支持,但是虽然我复制了 DataGridViewAccessibleObject 的所有重要代码,但在我的控件中仍然不起作用。

有人对 WinForms 中的自定义控件可访问性有更多经验吗?

【问题讨论】:

  • 为什么不使用内置支持?注意以“Accessible”开头的控件属性,您甚至可以在设计器中设置它们。
  • 因为我有一个直接继承自 Control 类的自定义控件,而不是任何现有的 WinForms 控件。

标签: winforms accessibility


【解决方案1】:

好的,我找到了:Control.AccessibilityNotifyClients 方法很神奇。必须在派生控件中重写此方法。

但是,为了让屏幕阅读器朗读文本,我必须调用:

AccessibilityNotifyClients(AccessibleEvents.Focus, index);
AccessibilityNotifyClients(AccessibleEvents.Selection, index);

这里的index是新选择的item的索引。

我在 CheckedListBox 的 .NET 参考源中找到了此代码。当我单独使用 Focus 或 Selection 事件时,屏幕阅读器没有反应。语音文本还取决于与新选择的项目相对应的 AccessibleObject 状态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 2022-11-30
    • 2020-11-10
    • 1970-01-01
    相关资源
    最近更新 更多