Возможно ли, что события перетаскивания в WPF не стреляя надежны?

голоса
-1

Интересно, если D & D событий не всегда стрельбы (DragLeave / DragEnter).

Я реализовал функцию D & D в моем GUI WPF. При перемещении некоторого элемента вокруг я DragLeave 'графический пользовательский элемент. Обычно это срабатывает соответствующее событие «DragLeave», но не всегда. Я боюсь, что по какой-то причинам скорости иногда эти события получают не уволило надежны. Если это так, то как я могу преодолеть эти проблемы?

Задан 09/10/2019 в 13:00
источник пользователем
На других языках...                            


1 ответов

голоса
0

Короткая версия: я написал некоторые примеры приложение , чтобы проверить это самому - и да - событие DragLeave не уволило надежно.

Длинная версия:

Что я сделал:

Я поместил в Labelкачестве перетаскиваемого объекта внутри StackPanel. Тогда я реализовал код для MouseMoveи DragLeaveсобытий. Дополнительный TextBlock- добавил к StackPanelа - служил в качестве выходного события. Если DragLeaveобработчик вызывается, я изменил Text Propertyиз TextBlockк ' DragLeave произошло . После этого я проверил его перетаскивание по Labelнаправлению к StackPanel.

Что я узнал:

Если бы я был быстро достаточно или нажать кнопку мыши близко к границе Label, то DragLeaveсобытие не уволили. Если бы я сделал это медленно , все работало отлично , как и ожидалось.

Что я делаю вывод:

Я думаю, если мышь покидает Labelдо « DoDragDrop» поток инициируется, событие не уволят, так как мышь уже снаружи Label. Таким образом , существует небольшой сбой между запуском D & D и стрельбой из первого события.

Можно увидеть такое же поведение в DragOver/MouseMoveобработчике. Чем быстрее вы перемещаете мышь, тем меньше очков (e.GetPosition (...)) вы можете захватить в обработчик событий.

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

Ответил 10/10/2019 в 14:51
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more