我正在使用装饰器来显示被拖动元素的“幽灵”......
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;
...但我找不到在拖动过程中更新装饰器位置的好方法。我最接近的是通过设置AllowDrop="true"
顶级网格并给它一个 DragOver 处理程序......
private void TopLevelGrid_OnDragOver(object sender, DragEventArgs e)
{
dragAdorner.UpdatePosition(e.GetPosition(topLevelGrid));
}
但这意味着我没有得到DragDropEffects
关于光标的正确反馈,即它总是显示DragDropEffects.Move
光标而不是DragDropEffects.None
直到我超过实际的放置目标。
有谁知道更新装饰器位置的更好方法?