WPF 4 Drag & Drop mit visuellem Element als Cursor

7

Ich habe eine WPF 4-App, die Drag & Drop ermöglichen soll, derzeit habe ich es mit einer einfachen Drag & Drop-Implementierung zu tun, aber ich habe festgestellt, dass es viel besser wäre, wenn sich der Mauszeiger nicht ändert Um die Bewegungsoperation darzustellen, könnte ich ein Bild unter meinem Finger verwenden.

Ich kann nicht scheinen, irgendwelche Proben oder doco zu finden, die dieses out-of-the-box funktioniert hat, also ich nehme an, ich werde es kundenspezifisch machen müssen ... irgendwelche Ideen?

Meine Drag & Drop-Operation wird in einem benutzerdefinierten Benutzersteuerelement gestartet, daher muss ich ein visuelles Element in den visuellen Baum einfügen und es meinem Finger folgen lassen, vielleicht sollte ich das ManipulationDelta -Ereignis in meinem Hauptfenster aktivieren , nach einem booleschen Objekt suchen und dann das Objekt bewegen?

Ich würde nur Ideen an dieser Stelle herumwerfen, jede Hilfe oder Ideen würde sehr geschätzt werden.

Prost, Markiere

    
Mark 28.06.2010, 00:20
quelle

2 Antworten

9

Es gibt ein Beispiel für die Verwendung eines benutzerdefinierten Zieh-Cursors bei Jaime Rodriguez MSDN Blog . Sie können das GiveFeedback verarbeiten Ereignis und ändern Sie den Mauszeiger, aber um ein benutzerdefiniertes Visual zu verwenden, erstellt der Autor ein neues Fenster und aktualisiert die Position auf QueryContinueDrag .

    
Quartermeister 28.06.2010, 00:38
quelle
18

Aus dem erwähnten Artikel konnte ich ein wenig vereinfachen. Grundsätzlich müssen Sie in 3 Veranstaltungen abonnieren:

  • PreviewMouseLeftButtonDownEvent : Das Ereignis, das beim Drücken der linken Taste ausgeführt wird, Sie können die Ziehaktion starten, indem Sie DragDrop.DoDragDrop aufrufen.
  • DropEvent : Das Ereignis, das ausgeführt wird, wenn Sie etwas fallen lassen (Steuerelement muss AllowDrop auf true festgelegt haben, um Drops zu akzeptieren)
  • GiveFeedbackEvent : Das Ereignis, das ständig ausgeführt wird, damit Sie konstantes Feedback geben können

DragDrop.DoDragDrop(draggedItem, draggedItem.DataContext, DragDropEffects.Move); Der erste Parameter ist das Element, das Sie ziehen, dann das zweite die Daten, die es enthält, und den Mauseffekt.

Diese Methode sperrt den Thread. So wird alles nach seinem Aufruf nur ausgeführt, wenn Sie mit dem Ziehen aufhören.

Im Drop-Ereignis können Sie die Daten abrufen, die Sie über den DoDragDrop -Aufruf gesendet haben.

Die Quelle für meine Tests befindet sich unten, und das Ergebnis ist:

Beispiel ziehen und loslassen (gif)

Vollständige Quelle

MainWindow.xaml

%Vor%

Card.xaml

%Vor%

MainWindow.xaml.cs

%Vor%

Card.xaml.cs

%Vor%     
BrunoLM 15.01.2015 23:45
quelle

Tags und Links