消費者介面自動化拖放的支援
Microsoft 消費者介面自動化定義兩個控制項模式,以支援拖放案例、拖曳控制項模式和DropTarget控制項模式。 您可以實作可拖曳之專案的拖曳控制項模式,以及可接收拖曳元素之專案的 DropTarget 控制項模式;也就是置放目標。 這兩種控制項模式會公開輔助技術可用來協助協助工具使用者完成拖放作業的資訊。
拖曳樣式
當您實作可拖曳元素的 拖曳 控制項模式時,您必須決定要實作 來源/目標 拖曳樣式,還是只實作 來源 拖曳樣式。
來源/目標樣式
在拖放的來源/目標樣式中,拖曳的元素會 (「source」) 和 drop-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 屬性,以指出發生的效果。
- 目標會引發 Dropd (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 方法可以擷取清單。
在該點上,主要來源元素會執行與上一節所述之來源元素相同的角色。
拖放的用戶端介面
消費者介面自動化用戶端應用程式使用IUIAutomationDragPattern和IUIAutomationDropTargetPattern介面,從 UI 元素存取拖放資訊。