【发布时间】: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 控件。