Как я могу обнаружить внутри обработчика DragLeave, если мышь вообще покинула элемент управления (не только в визуальном дочернем элементе)? - PullRequest
0 голосов
/ 04 июля 2019

У меня есть 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, превышающее ширину и высоту элемента управления), я мог бы легко решить, что он не был оставлен для элемента управления как визуальный дочерний элемент, но элемент управления в другой части визуального дерева.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...