0 Pluspunkte 0 Minuspunkte
Wie kann ich UserControl Elemente mit Drag und Drop verschieben?
von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

In deinem UserControl füge einen Event Handler für das MouseDown Ereignis hinzu. In diesem Event Handler speicherst du die Startposition der Maus und markierst es als "isDragging". Die beiden Variablen erstellst du davor in deinem Code, sie sollten von überall aus erreichbar sein.

private bool isDragging = false;
private Point startPoint;

private void UserControl_MouseDown(object sender, MouseButtonEventArgs e)
{
    if (e.ChangedButton == MouseButton.Left)
    {
        isDragging = true;
        startPoint = e.GetPosition(this);
        CaptureMouse();
    }
}

Dann fügst du einen Event Handler für das MouseMove Ereignis hinzu. Wenn das UserControl als "isDragged" markiert ist, aktualisiere die Position des UserControl entsprechend der Mausposition.

private void UserControl_MouseMove(object sender, MouseEventArgs e)
{
    if (isDragging)
    {
        Point currentPosition = e.GetPosition(this);
        double differenceX = currentPosition.X - startPoint.X;
        double differenceY = currentPosition.Y - startPoint.Y;

        // Aktualisiere die Position des UserControl
        Canvas.SetLeft(this, Canvas.GetLeft(this) + differenceX);
        Canvas.SetTop(this, Canvas.GetTop(this) + differenceY);

        startPoint = currentPosition;
    }
}

Dann fügst du noch einen Event Handler für das MouseUp Ereignis hinzu. Setze die "isDragged" Markierung zurück und löse die Mausfreigabe.

private void UserControl_MouseUp(object sender, MouseButtonEventArgs e)
{
    if (e.ChangedButton == MouseButton.Left)
    {
        isDragging = false;
        ReleaseMouseCapture();
    }
}
von (716 Punkte)