实现 UI 自动化 Invoke 控件模式

注意注意

本文档的目标读者是欲使用 System.Windows.Automation 命名空间中定义的托管 UI Automation类的 .NET Framework 开发人员。有关 UI Automation的最新信息,请参见 Windows Automation API: UI Automation(Windows 自动化 API:UI 自动化)。

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

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

本主题包括下列各节。

  • 实现准则和约定
  • IInvokeProvider 必需的成员
  • 异常
  • 相关主题

实现准则和约定

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

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

  • 调用控件通常是通过单击、双击或按 Enter、预定义的键盘快捷键或某种替代击键组合执行的。

  • 将会在已激活的控件上引发 InvokedEvent(以此响应执行其关联操作的控件)。 如果可能,该事件应该在控件完成操作后引发并且应该没有任何阻滞地返回。 在以下情况下,应该在为调用请求提供服务之前引发调用的事件:

    • 不可能在操作完成前进行等待(或者等待是不切实际的)。

    • 操作需要用户的交互。

    • 操作所需的时间很长,而且会导致调用客户端被阻滞相当长的时间。

  • 如果调用控件具有显著的副作用,则应该通过 HelpText 属性公开这些副作用。 例如,即使 Invoke 与选择无关,但 Invoke 仍然可能会使另一个控件变为选定状态。

  • 悬停(或鼠标悬停)效果通常不会构成调用的事件。 但是,根据悬停状态执行操作(而不是产生可视化效果)的控件应该支持 InvokePattern 控件模式。

注意注意

如果只能通过与鼠标有关的副作用来调用控件,则此实现将被认为是辅助功能问题。

  • 激活控件不同于选择项目。 但是,视控件而定,调用控件可能会因副作用的缘故而使项目变成选定状态。 例如,如果调用“我的文档”文件夹中的 Microsoft Word 文档列表项,则不仅会选择该项,而且还会打开文档。

  • 在调用元素时,元素可能会从 UI Automation树中立即消失。 因此,从事件回调提供的元素中请求信息可能会失败。 建议的解决方法是预先获取缓存的信息。

  • 控件可以实现多个控件模式。 例如,Microsoft Excel 工具栏上的填充颜色控件会实现 InvokePatternExpandCollapsePattern 控件模式。 ExpandCollapsePattern 将公开菜单,而 InvokePattern 将用所选的颜色填充处于活动状态的选项。

IInvokeProvider 必需的成员

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

必需的成员

成员类型

注释

Invoke

方法

Invoke 为一个异步调用,必须立即返回而不会出现任何阻止情况。

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

异常

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

异常类型

Condition

ElementNotEnabledException

如果控件未启用。

请参见

任务

在 UI 自动化提供程序中支持控件模式

使用 UI 自动化调用控件

在 UI 自动化中使用缓存

概念

UI 自动化控件模式概述

客户端的 UI 自动化控件模式

UI 自动化树概述