Перетащите элемент каркаса из контейнера в другой - PullRequest
0 голосов
/ 19 сентября 2018

Я работаю над перетаскиванием элементов для создания FormBuilder в WPF.

Я реализовал Drag с помощью MouseLeftButtonDown и MouseMove Event на холсте.

Я хочу переместить свой предмет в определенную StackPanel / Canvas с помощью MouseLeftButtonUp.

Мне нужно получить это событие в контейнере;Я пробовал DragLeave и Drop на целевом контейнере, они не будут стрелять.

В MouseMove я всегда помещаю курсор в середину перетаскиваемого элемента, и из-за этого всегда есть элемент над целевым контейнером при MouseUp.

Как я могу переместить этот элемент вЦелевой контейнер?

Вот некоторые части моих кодов:

    private void MainCanvas_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.LeftButton == MouseButtonState.Pressed)
        {
            if (MovingObject != null)
            {
                Point P = e.GetPosition(MainCanvas);

                (MovingObject as FrameworkElement).SetValue(Canvas.LeftProperty, P.X - DeltaX);
                (MovingObject as FrameworkElement).SetValue(Canvas.TopProperty, P.Y - DeltaY);
            }
        }
    }

    private void Button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        if (sender is Draggable)
        {
            var Sender = (Draggable)sender;
            PreviousParent = Sender.Parent as FrameworkElement;
            if (PreviousParent is StackPanel)
            {
                ((StackPanel)PreviousParent).Children.Remove(Sender);
                Point Point = e.GetPosition(MainCanvas);
                (Sender as FrameworkElement).SetValue(Canvas.LeftProperty, Point.X - Sender.ActualWidth/2);
                (Sender as FrameworkElement).SetValue(Canvas.TopProperty, Point.Y - Sender.ActualHeight / 2);
                MainCanvas.Children.Add(Sender);
            }
            MovingObject = Sender.ToDraggie();                
        }
        else
        {
            MovingObject = sender;
        }

        FirstXPos = e.GetPosition(sender as Control).X;
        FirstYPos = e.GetPosition(sender as Control).Y;

        DeltaX = ((Control)sender).ActualWidth / 2;
        DeltaY = ((Control)sender).ActualHeight / 2;
    }

    private void Button_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        MovingObject = null;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...