2009-11-12 8 views
16

Die WPF DragDrop.DoDragDrop Methode hat DragSource als ihren ersten Parameter.Bekommen DoDragDrop DragSource

Gibt es eine Möglichkeit, dieses DragSource Objekt in der OnDrop oder andere Drag & Drop-Ereignisse zu erhalten?

Antwort

19

Die kurze Antwort ist nein, denn wenn Sie ein Drag-Ereignis (oder DragEnter, etc.) erhalten, kann das Drag-Source-Objekt irgendwo sein. Es könnte in einem anderen Prozess sein. Es könnte in nativem Code sein. Es könnte sogar auf einer anderen Maschine sein, wenn ein RDP-ähnliches Protokoll hochentwickelt genug ist, um damit umzugehen. Mit anderen Worten, es gibt keine Garantie, dass das verwaltete DoDragDrop überhaupt aufgerufen wurde, und falls dies der Fall war, gibt es keine Garantie, dass es von diesem Prozess aufgerufen wurde.

ABER wenn Sie den Code schreiben, die DoDragDrop Anrufe und schreibt auch den Code für OnDrop(), gibt es eine einfache Möglichkeit, um diesen Effekt zu erhalten:

In dem Aufruf von DoDragDrop, fügen Sie Ihre Aufgabe als Extra Format:

var dragSource = this; 
var data = "Hello"; 

var dataObj = new DataObject(data); 
dataObj.SetData("DragSource", dragSource); 
DragDrop.DoDragDrop(dragSource, dataObj, DragDropEffects.Copy); 

Jetzt im OnDrag Handler ist es einfach, die Drag-Quelle zu erhalten:

protected override void OnDrop(DragEventArgs e) 
{ 
    var data = e.Data.GetData(DataFormats.Text); 
    var dragSource = e.Data.GetData("DragSource"); 
    ... 
} 

In einigen Fällen, wohl wissend, das Quellobjekt selbst ausreichend ist, um die Daten, die Sie zu erhalten, benötigen die Drag-Operation abgeschlossen ist, wobei in diesem Fall die oben läuft darauf hinaus:

DragDrop.DoDragDrop(dragSource, dragSource, DragDropEffects.Copy); 

... 

var dragSource = e.Data.GetData(typeof(MyDragSource)); 

Beachten Sie, dass in jedem dieser Fälle, wenn Die Quelle des Ziehvorgangs ist irgendwo anders als Ihr Code (z. B. Ziehen einer Datei von Emplorer), Sie erhalten dragSource = null

+9

Da die kurze Antwort 'Nein' ist, was ist der Zweck des dragSource-Parameters zu DragDrop. DoDragDrop? Wie wird es verwendet? – HappyNomad