Как поддерживать события MouseUp, MouseDown и MouseMove независимо от использования Mouse или Touch - PullRequest
1 голос
/ 29 апреля 2019

Я пытаюсь создать приложение WPF, которое будет поддерживать как мышь, так и сенсорный экран.Во время разработки я использовал только мышь, но после тестирования на сенсорном экране у меня возникли определенные проблемы. В случае нажатия кнопки мыши я запускаю DispatcherTimer, когда DispatcherTimer отмечает, что будет выполняться некоторый жизненно важный код.Однако проблема в том, что в MouseUp я остановил таймер, потому что пользователь должен удерживать нажатой, пока таймер не заработает.При использовании сенсорного устройства событие MouseUp сразу же запускается после события MouseDown, даже если палец на самом деле еще не был снят. Как я могу обойти это, не слишком меняя свой код?

Я попытался обработатьПредварительный просмотр события.Я пробовал использовать вспомогательные классы копирования, которые я обнаружил в аналогичных проблемах.Я пробовал свойство "Stylus.IsPressAndHoldEnabled".Последнее, что я помню, я пытался прикрепить и события Touch, и события Mouse, и отправлять их через одно и то же место. (Прочтите, что вы должны проверить свойство 'StylusDevice' MouseEventArgs, но оно всегда равно нулю, даже когдаиспользуя сенсорный экран ..) Так или иначе, я все еще не смог взломать его с помощью чего-либо, что я попробовал ..

У меня нет всего кода того, что я пробовал, который я объяснил выше,но вот по крайней мере то, с чем я сейчас сижу:

protected override void OnPreviewMouseMove(MouseEventArgs e) {
  Log.AddEntry("__________ Dashboard : OnPreviewMouseMove");
  InputMove(e);// my Move handling
}


protected override void OnPreviewMouseDown(MouseButtonEventArgs e) {
  Log.AddEntry("__________ Dashboard : OnPreviewMouseDown");
  InputDown(e); // my Down handling
  e.Handled = true;
}


protected override void OnPreviewMouseUp(MouseButtonEventArgs e) {
  Log.AddEntry("__________ Dashboard : OnPreviewMouseUp");
  InputUp(e); // my Up handling
}

Последнее, что я могу предоставить, - это журнал, который я создал при тестировании.Вы увидите, что событие Up запускается вскоре после события Down.Следующий журнал создается на сенсорном экране.В начале журнала я положил палец на экран и думаю, что, прежде чем я поднял палец, должна пройти секунда, так как журнал прекратил запись.

29.04.2019 15:10:02: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:10:02: __________ Dashboard : OnPreviewMouseDown
29.04.2019 15:10:02: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:10:02: __________ Dashboard : TIMER STARTED
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseUp
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:10:03: __________ Dashboard : TIMER STOPPED
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseDown
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:10:03: __________ Dashboard : TIMER STARTED
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseUp
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:10:03: __________ Dashboard : TIMER STOPPED
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseMove

Следующий журнал создается при использовании мыши(та же процедура, обратите внимание на 3 секунды между событиями «Вниз» и «Вверх». Событие DispatcherTimer Tick было запущено правильно, в отличие от использования Touch):

29.04.2019 15:15:47: __________ Dashboard : OnPreviewMouseDown
29.04.2019 15:15:47: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:15:47: __________ Dashboard : TIMER STARTED
29.04.2019 15:15:50: __________ Dashboard : OnPreviewMouseUp
29.04.2019 15:15:50: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:15:50: __________ Dashboard : TIMER STOPPED
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...