实现 UI 自动化 Invoke 控件模式

注释

本文档适用于想要使用 System.Windows.Automation 命名空间中定义的托管 UI 自动化类的 .NET Framework 开发人员。 有关 UI 自动化的最新信息,请参阅 Windows 自动化 API:UI 自动化

本主题介绍实现的 IInvokeProvider准则和约定,包括有关事件和属性的信息。 本主题的结尾列出了指向其他参考资料的链接。

控件 InvokePattern 模式用于支持不会在激活时保持状态的控件,而是启动或执行单一明确操作。 维护状态的控件(如复选框和单选按钮)必须分别实现 IToggleProviderISelectionItemProvider。 有关实现调用控件模式的控件示例,请参阅 UI 自动化客户端的控件模式映射

实施准则和约定

实现 Invoke 控件模式时,请注意以下准则和约定:

  • 如果不通过另一个控件模式提供程序公开同一行为,则控件实现 IInvokeProvider 。 例如,如果控件上的Invoke方法与Expand方法或Collapse方法执行相同的操作,则控件不应实现IInvokeProvider

  • 调用控件通常通过单击或双击或按 Enter、预定义的键盘快捷方式或击键的一些备用组合来执行。

  • 在已被激活的控件上引发InvokedEvent (作为对执行关联操作的控件的响应)。 如果可能,应在控件完成操作后引发该事件,并在不阻塞的情况下返回。 在以下情况中,应在服务 Invoke 请求之前引发调用的事件:

    • 无法或不实际等待操作完成。

    • 该操作需要用户交互。

    • 该操作非常耗时,会导致调用客户端在相当长的时间内阻塞。

  • 如果调用控件具有显著的副作用,则应通过 HelpText 属性公开这些副作用。 例如,即使 Invoke 未与所选内容关联, Invoke 也可能导致另一个控件处于选中状态。

  • 悬停(或鼠标悬停)效果通常不会构成调用的事件。 但是,基于悬停状态执行作(而不是引起视觉效果)的控件应支持 InvokePattern 控件模式。

注释

如果该控件仅可作为与鼠标相关的副作用的结果被调用,则此实现被视为可访问性问题。

  • 调用控件不同于选择项。 但是,具体取决于控件,调用控件可能导致项被选为副作用。 例如,在“我的文档”文件夹中调用Microsoft Word 文档列表项都选择该项目并打开文档。

  • 调用 UI 自动化树后,元素可以立即从 UI 自动化树中消失。 从由事件回调提供的元素请求信息可能失败。 建议使用预提取缓存信息。

  • 控件可以实现多个控件模式。 例如,Microsoft Excel 工具栏上的填充颜色控件同时实现 InvokePattern 控件模式和 ExpandCollapsePattern 控件模式。 ExpandCollapsePattern 公开菜单,并使用 InvokePattern 所选颜色填充活动选择。

IInvokeProvider 的必需成员

实现 IInvokeProvider需要以下属性和方法。

必需成员 成员类型 注释
Invoke 方法 Invoke 是一个异步调用,必须立即返回并且不会阻塞。

对于调用模式对话框时直接或间接启动模式对话框的控件,此行为尤其重要。 煽动事件的任何 UI 自动化客户端都将保持阻止状态,直到模式对话框关闭。

例外

提供程序必须引发以下异常。

异常类型 条件
ElementNotEnabledException 如果未启用该控件。

另请参阅