UI 自动化对拖放的支持
Microsoft UI 自动化定义了两种控件模式,用于支持拖放方案、拖动 控件模式以及 DropTarget 控件模式。 为可拖动的元素实现拖动控件模式,以及可接收拖动元素的元素的 DropTarget 控件模式;即放置目标。 这两种控件模式公开辅助技术可用于帮助辅助功能用户完成拖放作的信息。
拖动样式
为可拖动元素实现 拖动 控件模式时,需要确定是实现 源/目标 拖动样式,还是 仅源 拖动样式。
源/目标样式
在拖放的源/目标样式中,拖动的元素(“source”)和拖放目标元素(“target”)是不同的,并且每个元素都会引发一组不同的事件。 下面是使用源/目标样式的拖动作的生命周期:
- 当用户启动拖动作时:
- 源将引发 DragStart (UIA_Drag_DragStartEventId) 事件。
- 源将 IDragProvider::IsGrabbed 属性设置为 TRUE。
- 目标更新其 DropTargetEffect 属性。
- 目标将引发 DragEnter (UIA_DropTarget_DragEnterEventId) 事件。
- 目标将引发 DragLeave (UIA_DropTarget_DragLeaveEventId) 事件。
- 源引发 DragCancel (UIA_Drag_DragCancelEventId) 事件。
- 源将 IDragProvider::IsGrabbed 属性设置为 FALSE。
- 源将引发 DragComplete (UIA_Drag_DragCompleteEventId) 事件。
- 源将 IDragProvider::IsGrabbed 属性设置为 FALSE。
- 目标将 IDropTargetProvider::D ropTargetEffect 属性来指示发生的效果。
- 目标将引发 Dropped (UIA_DropTarget_DroppedEventId) 事件。
拖动作进入目标区域时:
拖动作离开目标区域时:
当用户将拖动的项释放到非目标上时:
当用户将拖动的项释放到目标上时:
源对象和目标对象中的事件密切相关,但不同。 有关正在拖动的内容的数据来自源,而有关“可能发生的情况”和“所发生的事情”的数据来自目标。
当拖动作正在进行时,拖动的项可以在作完成之前多次拖放到目标区域和目标区域。
任何需要更新其 IDropTargetProvider::D ropTargetEffect 属性的放置目标应引发该属性上的附加属性更改事件。
仅源样式
仅源拖动样式允许提供程序避免实现放置目标。 不实现放置目标有助于降低实现成本,但不会为辅助功能客户端应用程序提供有关接收删除的对象的任何信息。 下面是使用仅源样式的拖动作的生命周期:
- 当用户启动拖动作时:
- 源将引发 DragStart (UIA_Drag_DragStartEventId) 事件。
- 源将 IDragProvider::IsGrabbed 属性设置为 TRUE。
- 源将 IDragProvider::D ropEffect 属性设置为适当的值。
- 源将 IDragProvider::D ropEffect 属性设置为适当的值。
- 源引发 DragCancel (UIA_Drag_DragCancelEventId) 事件。
- 源将 IDragProvider::IsGrabbed 属性设置为 FALSE。
- 源将引发 DragComplete (UIA_Drag_DragCompleteEventId) 事件。
- 源设置 IDragProvider::D ropEffect 属性,以指示删除项目时发生的效果。
拖动作进入目标区域时:
拖动作离开目标区域时:
当用户将拖动的项释放到非目标上时:
当用户将拖动的项释放到目标上时:
拖动多个项
如果提供程序实现拖放作,用户可以同时拖动多个对象,则提供程序会使用上一节中所述的源/目标或仅源样式,但稍有不同。 当用户开始拖动作时,提供程序将创建一个主源元素,该元素表示正在拖动的完整项集。 主源元素代表拖动的项集引发所有事件;项不会引发自己的任何事件。
- 当用户启动拖动作时:
- 提供程序创建主源元素。
- 主源元素引发 DragStart (UIA_Drag_DragStartEventId) 事件。
- 主源元素将 IDragProvider::IsGrabbed 属性设置为 TRUE。
- 主源元素更新已捕获项的列表以包含正在拖动的所有项,以便 getGrabbedItems方法可以检索列表。
对于该点,主源元素将执行与上一节中所述的源元素相同的角色。
拖放的客户端接口
UI 自动化客户端应用程序使用 IUIAutomationDragPattern 和 IUIAutomationDropTargetPattern 接口从 UI 元素访问拖放信息。