Description of the bug:
I am stuck for days…
I want to drop a ListBox item exactly from where it was picked up, and it doesn’t work.
PropertyViewModel.cs =
private void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs? e)
{
if (e.Source is FrameworkElement element && element.DataContext is PropertyViewModel propertyViewModel)
{
Point mousePosition = e.GetPosition(element);
propertyViewModel.MouseOffset = new Point(
mousePosition.X,
mousePosition.Y
);
//Debug.WriteLine("MouseOffset: " + propertyViewModel.MouseOffset);
}
}
TemplateGeneratorViewModel.cs =
public void Drop(IDropInfo dropInfo)
{
if (dropInfo.Data is PropertyViewModel originalProperty && dropInfo.VisualTarget is ListBox listBox)
{
Point dropPosition = dropInfo.DropPosition;
Debug.WriteLine("DROP: " + dropPosition);
if (listBox.Name == CanvasListBoxName)
{
if (!originalProperty.IsOnCanvas)
{
CloneItemToCanvas(originalProperty, dropPosition);
//DragDrop.DefaultDropHandler.Drop(dropInfo);
}
else
{
// THIS IS THE IMPORTANT PART
var newPosition = new Point(
dropPosition.X - originalProperty.MouseOffset.X,
dropPosition.Y - originalProperty.MouseOffset.Y);
originalProperty.X = (int)(newPosition.X);
originalProperty.Y = (int)(newPosition.Y);
}
}
else if (listBox.Name == PropertyListBoxName && originalProperty.IsOnCanvas)
{
// Move the item back to the property list if needed
originalProperty.IsOnCanvas = false;
CanvasItems.Remove(originalProperty);
}
}
}
Expected behavior
Just to drop the element from where it was picked up relative to the mouse by using Gong’s Drop() WPF function.
I have been stuck for days and I don’t know what to do… Thanks for your time.