UI オートメーションによるドラッグ アンド ドロップのサポート
Microsoft UI オートメーションでは、ドラッグ アンド ドロップ のシナリオをサポートするための 2 つのコントロール パターン、ドラッグ コントロール パターン、および DropTarget コントロール パターンが定義されています。 ドラッグできる要素のドラッグ コントロール パターンと、ドラッグされた要素を受け取ることができる要素の DropTarget コントロール パターンを実装します。つまり、ドロップ ターゲットです。 2 つのコントロール パターンは、アクセシビリティ ユーザーがドラッグ アンド ドロップ操作を完了するのに役立つ支援技術が使用できる情報を公開します。
- スタイル をドラッグする
- ソース/ターゲット スタイルの
- ソースのみのスタイル を する
- 複数の項目をドラッグ
- ドラッグ アンド ドロップ のクライアント インターフェイスを する
スタイルのドラッグ
ドラッグ可能な要素の ドラッグ コントロール パターンを実装する場合は、ソース/ターゲット ドラッグ スタイルを実装するか、ソースのみの ドラッグ スタイルを実装するかを決定する必要があります。
ソース/ターゲット のスタイル
ドラッグ アンド ドロップのソース/ターゲット スタイルでは、ドラッグされた要素 ("source") とドロップ ターゲット要素 ("ターゲット") が異なり、それぞれが個別のイベント セットを発生させます。 ソース/ターゲット スタイルを使用するドラッグ操作のライフ サイクルを次に示します。
- ユーザーがドラッグ操作を開始したとき:
- ソースによって 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 要素からドラッグ アンド ドロップ情報にアクセスします。