Страницы

Поиск по вопросам

суббота, 13 июля 2019 г.

Обработка событий стилуса на ListView

Все события сенсорного взаимодействия порождают соответствующие события мыши. Так, для Grid достаточно подписаться на MouseDown (можно как на Right button, так и на Left button), MouseUp, MouseMove и все события стилуса будут происходить совместно с событиями мыши. Таким образом, здесь нет смысла подписываться на SlylusDown, SlylusUp и StylusMove.
Однако, стоит только поменять Grid на ListView, как подобная удобная штука пропадает...
Код, которого достаточно для иллюстрации проблемы:

private void listView_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Debug.WriteLine("DOWN"); }
private void listView_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e) { Debug.WriteLine("UP"); }
private void listView_MouseMove(object sender, MouseEventArgs e) { Debug.WriteLine("MOVE"); }


Ответ

Вообщем то, точнее, только при StylusMove не происходит MouseMove. Такие события стилуса как Down и Up, всё таки порождают соответствующие события мыши.
В качестве решения предлагаю следующий простой код:
private void listView_MouseMove(object sender, MouseEventArgs e) { HandleMouseMove(sender, e.GetPosition(sender as IInputElement)); }
private void ListView_StylusMove(object sender, StylusEventArgs e) { HandleMouseMove(sender, e.GetPosition(sender as IInputElement)); }
private void HandleMouseMove(object sender, Point mousePos) { Debug.WriteLine("MOVE: " + mousePos); }

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

Отправить комментарий