2012-04-05 12 views
2

Ich bin etwas neu in WPF, obwohl ich etwas Erfahrung in Forms habe, und ich beschloss, endlich zu versuchen, herauszufinden, wie man WPF verwendet. Wenn ich also zu ziehbar Kontrollen bekam, das ist der Code, den ich kam mit (ich versuchte, es zu ändern mit WPF zu arbeiten, aber die Steuerung nur zuckt überall):Draggable-Steuerelement in WPF?

private void rectangle1_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (e.LeftButton == MouseButtonState.Pressed) { 
     double x = this.Left + (double)e.GetPosition(this).X - (double)rectangle1.Margin.Left; 
     double y = this.Top + (double)e.GetPosition(this).Y - (double)rectangle1.Margin.Top; 
     rectangle1.Margin = new Thickness(x, y, rectangle1.Margin.Right, rectangle1.Margin.Bottom); 
    } 
} 

Antwort

4

Sie wollen adorners verwenden ziehen zu erreichen, Ändern der Größe, Drehen usw.

+0

Ich möchte wirklich den Code aus dem Nichts schreiben wie nur grundlegende Sachen wie Ereignisse und Ränder etc. verwenden – Oztaco

+3

Das ist wirklich keine schlaue Idee, wenn es um das Ziehen von Steuerelementen kommt, was eine ziemlich "nicht-triviale" Aufgabe ist. Sonst hätte WPF das Konzept des Adorners nicht eingeführt: –

+0

Adorner sind wirklich der Weg zu gehen –

1

Wenn Sie es mit der Hand Verwendung folgenden Algorithmus zu tun:

  1. auf MouseDown Ereignis: speichern Mausposition, TopLeft Position der Kontrolle, und Delta (Offset) dieser Koordinaten, und setzen Sie einige booleschen Feld Flag z. IsDragStartted zu wahr.
  2. Auf MouseMove Prüfung, die gestartet Drag und verwenden Mausposition und versetzt den neuen Wert von TopLeft Position der Steuerung zu berechnen

  3. Auf MouseUp Ereignis IsDragStartted auf false gesetzt

1

here ist ein ziemlich guter Artikel zu diesem Thema auf MSDN. Auch, eine schnelle Suche auf Google enthüllt eine wahre Fülle von Möglichkeiten für Sie DnD Dining Vergnügen.

+0

dafuq habe ich gerade gelesen? – CyberFox