Я использую украшение, чтобы показать «призрак» перетаскиваемого элемента...
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
, пока я не нахожусь над фактической целью перетаскивания.
Кто-нибудь знает лучший способ обновить позицию декоратора?