Я создал собственный TreeView в WPF. Элемент управления поддерживает перетаскивание (изменение порядка расположения узлов и перетаскивание узлов за пределы элемента управления в другие элементы управления).
Я должен определить, происходит ли операция перетаскивания из других элементов управления или запускается из TreeView. Я также хочу определить, покидает ли операция перетаскивания элемент управления.
Для этого обнаружения я использую обычные события DragEnter и DragLeave. Проблема здесь в том, что это событие также запускается для дочерних элементов управления.
Я запускаю операцию перетаскивания, и событие DragEnter запускается. Когда я перемещаю мышь над дочерним элементом управления, событие DragEnter запускается снова - на мой взгляд, это правильное поведение, поскольку дочерний элемент управления не обрабатывает событие и «пузырится» весь путь до основного элемента управления (самый внешний контроль).
Есть ли способ предотвратить такое поведение? Я пробовал настройки «AllowDrop» для каждого дочернего элемента управления, но это приводит к появлению курсора «Запрещено».
В качестве обходного пути я реализовал код, который устанавливает для свойства IsHitTestVisible для всех экземпляров TreeViewItem значение False, а когда операция перетаскивания останавливается, для свойства устанавливается значение true. Есть ли лучшее решение?