Странное поведение события касания WPF

#wpf #touchscreen #mouseleftbuttonup

#wpf #сенсорный экран #mouseleftbuttonup

Вопрос:

Мое приложение WPF работает отлично, но только при использовании мыши. Проблемы начинаются при его использовании на устройстве с сенсорным экраном..

У меня есть сетка, которая обрабатывает события MouseLeftButtonUp и TouchUp.

Теперь я нажимаю на сетку, она обрабатывает связанные события, затем я нажимаю на какой-то другой элемент управления, этот другой элемент управления улавливает событие касания, как и ожидалось, затем событие касания преобразуется в событие MouseLeftButtonUp, чего также следует ожидать.

Однако недавно запущенное событие MouseLeftButtonUp запускается НЕ для элемента управления, на который я нажал, а для вышеупомянутой сетки! Почему он ведет себя таким образом?

Заранее благодарю вас…

Комментарии:

1. Откуда вы знаете, что событие MouseLeftButtonUp «запускается НЕ для элемента управления, на который я нажал, а для вышеупомянутой сетки» ?

2. Потому что и сетка, и элемент управления, на который я нажал, имеют обработчики MouseLeftButtonUp. Вызывается обработчик сетки, а обработчик элемента управления — нет.

3. Это еще одна сетка, или кнопка, или просто какое-то пустое пространство внутри layoutcontrol. Это все то же самое. Несмотря на то, что я явно подписываюсь на MouseLeftButtonUp, обработчик элемента управления не вызывается, но вызывается обработчик сетки…

4. Вы уверены, что установили Background (подойдет прозрачный) для этой сетки? В качестве примечания, я удивлен Button , поскольку внутренний контроль позволяет событию всплывать.

5. Ну, я этого не сделал. На самом деле, это devexpress gridcontrol, поэтому, возможно, фон установлен по умолчанию, нужно проверить..

Ответ №1:

Это нормальное поведение для всех RoutedEvent s. Со страницы UIElement.MouseLeftButtonUp события в MSDN:

Хотя это маршрутизируемое событие, по-видимому, следует по пузырьковому маршруту через дерево элементов, на самом деле это прямое маршрутизируемое событие, которое вызывается и повторно вызывается по дереву элементов каждым UIElement.

MSDN предоставляет гораздо больше ответов и намного быстрее, чем Stack Overflow.

Комментарии:

1. Спасибо .. Моего уровня знаний wpf недостаточно для самостоятельного анализа MSDN.. Может быть, вы могли бы подсказать мне, что мне следует сделать, чтобы событие MouseLeftButtonUp срабатывало только для элемента управления, на который я нажал, а не для других..