我正在使用一个装饰器来展示被拖动元素的“幽灵”...
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
,直到我到达实际的放置目标。
有人知道更新装饰器位置的更好方法吗?