ドラッグ アンド ドロップのUI オートメーションサポート
Microsoft UI オートメーションでは、ドラッグ アンド ドロップのシナリオ、ドラッグ コントロール パターン、および DropTarget コントロール パターンをサポートするための 2 つのコントロール パターンを定義しています。 ドラッグできる要素のドラッグ コントロール パターンと、ドラッグされた要素を受け取ることができる要素の DropTarget コントロール パターンを実装します。つまり、ドロップ ターゲットです。 2 つのコントロール パターンは、アクセシビリティ ユーザーがドラッグ アンド ドロップ操作を完了するのに役立つ支援技術が使用できる情報を公開します。
スタイルのドラッグ
ドラッグ可能な要素に 対してドラッグ コントロール パターンを実装する場合は、 ソース/ターゲット のドラッグ スタイルを実装するか、 ソースのみの ドラッグ スタイルを実装するかを決定する必要があります。
ソース/ターゲットのスタイル
ドラッグ アンド ドロップのソース/ターゲット スタイルでは、ドラッグされた要素 ("source") と drop-target 要素 ("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 プロパティを設定して、アイテムが削除されたときに発生した効果を示します。
ドラッグ操作がターゲット領域に入ったとき:
ドラッグ操作がターゲット領域から離れると、次のようになります。
ユーザーがドラッグした項目をターゲット以外の上に離すと、次のようになります。
ユーザーがドラッグした項目をターゲットの上に離すと、次の操作が行われます。
複数の項目をドラッグする
プロバイダーが複数のオブジェクトを同時にドラッグできるドラッグ アンド ドロップ操作を実装する場合、プロバイダーは前のセクションで説明したようにソース/ターゲットまたはソースのみのスタイルを使用しますが、わずかな違いがあります。 ユーザーがドラッグ操作を開始すると、プロバイダーは、ドラッグされる項目の完全なセットを表すマスター ソース要素を作成します。 master ソース要素は、ドラッグされた項目のセットに代わってすべてのイベントを発生させます。項目は独自のイベントを発生させません。
- ユーザーがドラッグ操作を開始すると、次のようになります。
- プロバイダーは、マスター ソース要素を作成します。
- マスター ソース要素は、DragStart (UIA_Drag_DragStartEventId) イベントを発生させます。
- マスター ソース要素は、 IDragProvider::IsGrabbed プロパティを TRUE に設定 します。
- master ソース要素は、 GetGrabbedItems メソッドがリストを取得できるように、ドラッグされているすべての項目を含むように、つかんだ項目のリストを更新します。
その時点で、マスター ソース要素は、前のセクションで説明したように、ソース要素の役割と同じ役割を実行します。
ドラッグ アンド ドロップ用のクライアント インターフェイス
UI オートメーションクライアント アプリケーションでは、IUIAutomationDragPattern インターフェイスと IUIAutomationDropTargetPattern インターフェイスを使用して、UI 要素からドラッグ アンド ドロップ情報にアクセスします。