Как запретить элементам управления запускать события DragEnter - PullRequest
0 голосов
/ 15 ноября 2018

Я создал собственный TreeView в WPF. Элемент управления поддерживает перетаскивание (изменение порядка расположения узлов и перетаскивание узлов за пределы элемента управления в другие элементы управления).

Я должен определить, происходит ли операция перетаскивания из других элементов управления или запускается из TreeView. Я также хочу определить, покидает ли операция перетаскивания элемент управления.

Для этого обнаружения я использую обычные события DragEnter и DragLeave. Проблема здесь в том, что это событие также запускается для дочерних элементов управления.

Я запускаю операцию перетаскивания, и событие DragEnter запускается. Когда я перемещаю мышь над дочерним элементом управления, событие DragEnter запускается снова - на мой взгляд, это правильное поведение, поскольку дочерний элемент управления не обрабатывает событие и «пузырится» весь путь до основного элемента управления (самый внешний контроль).

Есть ли способ предотвратить такое поведение? Я пробовал настройки «AllowDrop» для каждого дочернего элемента управления, но это приводит к появлению курсора «Запрещено».

В качестве обходного пути я реализовал код, который устанавливает для свойства IsHitTestVisible для всех экземпляров TreeViewItem значение False, а когда операция перетаскивания останавливается, для свойства устанавливается значение true. Есть ли лучшее решение?

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