Я работаю над перетаскиванием элементов для создания 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;
}