2009-03-04 2 views

Antwort

3

Können Sie genau erklären, was Sie mit Drag & Drop in Silverlight erreichen möchten? Die Top-Antwort in der Frage, die Sie auf dieser Seite Links verbunden: http://www.adefwebserver.com/DotNetNukeHELP/Misc/Silverlight/DragAndDropTest/

Dieses enthält ein Beispielprojekt mit Quelle, die per Drag & Drop implementiert (zufälligerweise auf der Grundlage einer Probe I für Beta 1 von Silverlight 2 gemacht: -)). Was ist mit diesem Code nicht für Ihre Bedürfnisse geeignet?

EDIT: Das Grundgerüst eines Drag & Drop-Implementierung würde wie folgt aussehen:

bool isDragging = false; 

void elementMouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    if (element.CaptureMouse()) 
    { 
     isDragging = true; 
     element.MouseMove += elementMouseMove; 
     //start drag code goes here 
    } 
} 

void elementMouseMove(object sender, MouseEventArgs e) 
{ 
    //Drag code goes here 
} 

void element_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    if (isDragging) 
    { 
     element.ReleaseMouseCapture(); 
     isDragging = false; 
     element.MouseMove -= elementMouseMove; 

     //Drop code goes here 
    } 
} 

Fügen Sie die MouseLeftButtonUp/Down-Handler auf das Element, das Sie ziehen möchten.

Fügen Sie im MouseMove-Ereignishandler den Code hinzu, den Sie beim Ziehen ausführen möchten: z. Ändern Sie Canvas.Top und Canvas.Left, um die Mausposition anzupassen. Sie können die Mausposition von den Ereignisargumenten abrufen. Sie würden wahrscheinlich die Position relativ zum Elementcontainer erhalten wollen.

Fügen Sie im MouseLeftButtonUp-Ereignishandler den Code hinzu, der ausgeführt werden würde, wenn der "Drop" auftritt. Beispielsweise möchten Sie möglicherweise einen "Papierkorb" implementieren, an den Elemente gezogen werden können. In diesem Fall würden Sie wissen wollen, welche Elemente sich unter der Maus an der Stelle des Abfalls befinden. Sie können VisualTreeHelper.FindElementsAtHostCoordinates verwenden, indem Sie die Mausposition relativ zum Stamm der Anwendung übergeben (verwenden Sie e.GetPosition (null)). Wenn Ihr "recycle bin" -Element von FindElementsInHostCoordinates zurückgegeben wird, wissen Sie, dass Sie die entsprechende Aktion ausführen.

Kann Ihnen diese Frage helfen?

+0

danke für deine Antwort - Ich wollte nur jemanden, der es bereits getan hat, um eine Reihe von High-Level-Schritten zu nennen, um eine generische Drag & Drop-Lösung in Silverlight zu implementieren, anstatt in den Code zu graben (Zeitmangel). – JohnIdol

+0

Ich habe die Antwort bearbeitet, um weitere Informationen hinzuzufügen. – KeithMahoney

0

ist nicht MouseLeftButtonDown, wo Sie die Erfassung starten sollen, nicht auf mouselftbuttonup?