У меня есть 2 ItemsControls
A и B рядом друг с другом. Я хочу перетащить предмет из А в Б.
На DragLeaving A Я хочу удалить Предмет из A (по крайней мере, визуально). Поэтому я использую событие DragLeave
для A. Но это событие также запускается, если я перетаскиваю / в другие элементы A.
Проблема в том, что я не могу разделить случаи ухода А в другой Предмет (из А) и оставления А в В внутри обработчика DragLeave.
Я уже пытался использовать e.GetPosition(sender as IInputElement)
, но, похоже, точка, указанная таким образом (из события DragLeave), не относится к sender
, а относительно элемента управления, для которого мышь оставила sender
.
VisualTreeHelper.HitTest(...)
тоже не сработал, поскольку Точка из e.GetPosition(...)
можно вписать в ItemsControl A и, следовательно, сделать HitTest бессмысленным.
В конце я хочу перетащить элемент из A в B со специальной анимацией удаления и добавления, а не только с обновленным результатом после удаления. Может быть, есть и другие способы, кроме DragLeave
, для достижения этой цели. Любые идеи или рекомендации (помимо использования внешних библиотек, кроме .NET и т. Д.) Приветствуются. Я предполагаю, что существует общий способ решения таких взаимодействий GUI (d & d с анимацией), даже если я не нашел его.
EDIT:
Возможно ли, что метод e.GetPosition(...)
события DragLeave возвращает неправильное значение и поэтому является ошибкой в структуре?
Если бы он возвращал точку за пределами элемента управления (либо отрицательное значение x / y, либо значение x / y, превышающее ширину и высоту элемента управления), я мог бы легко решить, что он не был оставлен для элемента управления как визуальный дочерний элемент, но элемент управления в другой части визуального дерева.