Unterstützung der Benutzeroberflächenautomatisierung für Drag-and-Drop
Die Microsoft-Benutzeroberflächenautomatisierung definiert zwei Steuerelementmuster für die Unterstützung von Drag-and-Drop-Szenarien, das Ziehen Steuerelementmusters und das DropTarget- Steuerelementmusters. Sie implementieren das Drag-Steuerelementmuster für ein Element, das gezogen werden kann, und das DropTarget-Steuerelementmuster für ein Element, das ein gezogenes Element empfangen kann; d. h. ein Drop-Ziel. Die beiden Steuerelementmuster machen Informationen verfügbar, die eine Hilfstechnologie verwenden kann, um einem Benutzer bei der Barrierefreiheit zu helfen, einen Drag-and-Drop-Vorgang abzuschließen.
Formatvorlagen ziehen
Wenn Sie das Ziehen Steuerelementmusters für ein ziehbares Element implementieren, müssen Sie entscheiden, ob das Quell-/Zielformat Ziehformat oder das schreibgeschützte Ziehformat implementiert werden soll.
Quell-/Zielformatvorlage
Im Quell-/Zielstil des Ziehens und Ablegens sind das gezogene Element (die "Quelle") und das Drop-Target-Element (das "Ziel") unterschiedlich, und jeder löst einen unterschiedlichen Satz von Ereignissen aus. Hier sehen Sie den Lebenszyklus für einen Ziehvorgang, der den Quell-/Zielstil verwendet:
- Wenn der Benutzer einen Ziehvorgang startet:
- Die Quelle löst das DragStart (UIA_Drag_DragStartEventId)-Ereignis aus.
- Die Quelle legt die IDragProvider::IsGrabbed-eigenschaft auf TRUEfest.
- Ziele aktualisieren ihre DropTargetEffect Eigenschaften.
- Das Ziel löst das DragEnter (UIA_DropTarget_DragEnterEventId) -Ereignis aus.
- Das Ziel löst das DragLeave (UIA_DropTarget_DragLeaveEventId) -Ereignis aus.
- Die Quelle löst das DragCancel (UIA_Drag_DragCancelEventId) -Ereignis aus.
- Die Quelle legt die eigenschaft IDragProvider::IsGrabbed auf FALSEfest.
- Die Quelle löst das DragComplete (UIA_Drag_DragCompleteEventId) -Ereignis aus.
- Die Quelle legt die eigenschaft IDragProvider::IsGrabbed auf FALSEfest.
- Das Ziel legt die IDropTargetProvider::D ropTargetEffect-Eigenschaft fest, um den Effekt anzugeben, der aufgetreten ist.
- Das Ziel löst das Dropped (UIA_DropTarget_DroppedEventId)-Ereignis aus.
Wenn der Ziehvorgang einen Zielbereich eingibt:
Wenn der Ziehvorgang einen Zielbereich verlässt:
Wenn der Benutzer das gezogene Element über ein Nichtziel loslässt:
Wenn der Benutzer das gezogene Element über ein Ziel loslässt:
Die Ereignisse aus den Quell- und Zielobjekten sind eng miteinander verknüpft, unterscheiden sich jedoch. Die Daten darüber, was gezogen wird, stammen aus der Quelle, während die Daten über "Was könnte passieren" und "Was passiert" aus dem Ziel stammt.
Wenn ein Ziehvorgang ausgeführt wird, kann das gezogene Element beliebig oft in zielbereiche gezogen und aus den Zielbereichen gezogen werden, bevor der Vorgang abgeschlossen ist.
Jedes Dropziel, das seine IDropTargetProvider::D ropTargetEffect Eigenschaft automatisch aktualisieren muss, sollte ein zusätzliches Eigenschaftsänderungsereignis für diese Eigenschaft auslösen.
Schreibgeschützter Quellstil
Mit dem schreibgeschützten Quellziehstil kann ein Anbieter die Implementierung von Dropzielen vermeiden. Die Implementierung von Drop-Zielen trägt dazu bei, die Implementierungskosten zu senken, bietet jedoch keine Informationen zu dem Objekt, das den Drop erhalten hat. Hier sehen Sie den Lebenszyklus für einen Ziehvorgang, der die schreibgeschützte Formatvorlage verwendet:
- Wenn der Benutzer einen Ziehvorgang startet:
- Die Quelle löst das DragStart (UIA_Drag_DragStartEventId)-Ereignis aus.
- Die Quelle legt die IDragProvider::IsGrabbed-eigenschaft auf TRUEfest.
- Die Quelle legt die IDragProvider::D ropEffect-Eigenschaft auf den entsprechenden Wert fest.
- Die Quelle legt die IDragProvider::D ropEffect-Eigenschaft auf den entsprechenden Wert fest.
- Die Quelle löst das DragCancel (UIA_Drag_DragCancelEventId) -Ereignis aus.
- Die Quelle legt die eigenschaft IDragProvider::IsGrabbed auf FALSEfest.
- Die Quelle löst das DragComplete (UIA_Drag_DragCompleteEventId) -Ereignis aus.
- Die Quelle legt die IDragProvider::D ropEffect-Eigenschaft fest, um den Effekt anzugeben, der beim Ablegen des Elements stattgefunden hat.
Wenn der Ziehvorgang einen Zielbereich eingibt:
Wenn der Ziehvorgang einen Zielbereich verlässt:
Wenn der Benutzer das gezogene Element über ein Nichtziel loslässt:
Wenn der Benutzer das gezogene Element über ein Ziel loslässt:
Ziehen mehrerer Elemente
Wenn ein Anbieter Drag-and-Drop-Vorgänge implementiert, bei denen der Benutzer mehrere Objekte gleichzeitig ziehen kann, verwendet der Anbieter die Formatvorlagen "Source/Target" oder "Source-only", wie im vorherigen Abschnitt beschrieben, aber mit einem kleinen Unterschied. Wenn der Benutzer den Ziehvorgang beginnt, erstellt der Anbieter ein Masterquellelement, das den vollständigen Satz von Elementen darstellt, die gezogen werden. Das Masterquellelement löst alle Ereignisse im Namen der Gruppe gezogener Elemente aus; die Elemente lösen keine eigenen Ereignisse aus.
- Wenn der Benutzer einen Ziehvorgang startet:
- Der Anbieter erstellt das Masterquellelement.
- Das Masterquellelement löst das DragStart (UIA_Drag_DragStartEventId)-Ereignis aus.
- Das Masterquellelement legt die eigenschaft IDragProvider::IsGrabbed auf TRUEfest.
- Das Masterquellelement aktualisiert die Liste der abgerufenen Elemente, um alle Elemente einzuschließen, die gezogen werden, sodass die GetGrabbedItems Methode die Liste abrufen kann.
Zu diesem Zeitpunkt führt das Masterquellelement dieselbe Rolle wie das des Quellelements aus, wie im vorherigen Abschnitt beschrieben.
Clientschnittstellen für Drag-and-Drop
Benutzeroberflächenautomatisierungs-Clientanwendungen verwenden die IUIAutomationDragPattern und IUIAutomationDropTargetPattern Schnittstellen für den Zugriff auf Drag-and-Drop-Informationen aus UI-Elementen.