How to update the position of the dragging adorner while dragging and dropping WPF-n-drop?

I use adorner to show the "ghost" of an element that is being dragged ...

var adornerLayer = AdornerLayer.GetAdornerLayer(topLevelGrid);
dragAdorner = new DragAdorner(topLevelGrid, itemToDrag);
adornerLayer.Add(dragAdorner);
dragAdorner.UpdatePosition(e.GetPosition(topLevelGrid));

DragDrop.DoDragDrop(sourceItems, viewModel, DragDropEffects.Move);

adornerLayer.Remove(dragAdorner);
itemToDrag = null;

... but I cannot find a good way to update the position of adorner while dragging. The closest I have is to set AllowDrop="true"up a top-level grid and give it a DragOver handler ...

private void TopLevelGrid_OnDragOver(object sender, DragEventArgs e)
{
 dragAdorner.UpdatePosition(e.GetPosition(topLevelGrid));
}

But this means that I am not getting the correct feedback DragDropEffectson the cursor, i.e. always shows the cursor DragDropEffects.Moveinstead DragDropEffects.None, until I go to the actual target camera.

Does anyone know how best to update adorner's position?

+3
source share
3 answers

( , ) Bea Stollnitz, . drag n drop adorner "".

WPF - , - DragAdorners - , 't .

Bea- -, Window DragOver AllowDrop , .

+6

, Bea code, , ...

AllowDrop="true" DragOver, adorner, DragDropEffects None. DragOver , adorner... , , e.Handled = true, None, 'over over drop...

private void TopLevelGrid_OnDragOver(object sender, DragEventArgs e)
{
 UpdateDragAdornerPosition(e.GetPosition(topLevelGrid));
 e.Effects = DragDropEffects.None;
 e.Handled = true;
}

private void DropTarget_OnDragOver(object sender, DragEventArgs e)
{
 UpdateDragAdornerPosition(e.GetPosition(topLevelGrid));
 e.Handled = true;
}
+3

, , , . p/invoke, , . AllowDrop , .

For a complete answer (including most of the code I used) you can check my question:
WPF - track mouse while dragging and dropping Delete until AllowDrop = False

0
source

Source: https://habr.com/ru/post/1729084/


All Articles