Проблема касания списка просмотра WPF в окне 10: «событие другого шаблона данных вызвано, хотя оно может не произойти» - PullRequest
0 голосов
/ 12 марта 2020

При использовании приложения WPF на windows 10 с сенсорным экраном возникает проблема с просмотром списка. При работе с мышью все работает нормально.

Мы создали простой тест-проект, который используется для имитации проблемы на windows 10 и может быть найден на GitHub . Билет также создается на MSDN

Вкратце ниже краткая информация о технической настройке:

  • Мы используем сгруппированный просмотр списка, и для каждой группы: кнопка переключения и другой (внутренний) вид списка.
  • Внутренний вид списка использует ItemTemplateSelector, связанный с селектором Datatemplate, для выбора матрицы данных.
  • Существует 3 таблицы данных (флажок, цифра c, текст ), который будет выбран на основе свойства type ограниченной модели.
  • Каждая табличка данных имеет панель стека. Панель стека в тексте с цифрой c дата-табличка привязана к событию PreviewMouseDown. Важно, чтобы панель стека в флажке не была связана с событием.

В целом это работает хорошо, однако иногда при касании флажка вызывается PreviousMouseDown другого шаблона.

Я ожидаю, что такое поведение может не произойти, это правильно?

Мы нашли обходной путь (*) для этой проблемы, но мы не нашли причину root.

Почему запускается событие другого шаблона?

I ' Я начинаю полагать, что это может быть проблемой с WPF Listview и сенсорным поведением?

(*) Если мы знаем, что иногда событие вызывается из неправильного шаблона, мы проверять каждое событие, происходит ли это событие из правильного шаблона, и если нет, мы ничего не делаем.

Ниже, при быстром нажатии на флажок, вы можете увидеть, как срабатывает получение клика.

isuses

Ниже приведено более подробное описание кода:

  • Таблицы данных и селектор

datatemplates

  • Сгруппированный просмотр списка с внутренним представлением списка и шаблоном элемента селектор

listview

  • Ниже кода и обработчик события PreviewMouseDown

codebehind

Ниже приведен обзор шагов, которые мы предприняли для его решения, но ни один из них не привел к решению.

enter image description here

1 Ответ

0 голосов
/ 08 мая 2020

Поскольку WPF поддерживает касание, а касание экрана также «переводится» в событие mousedown. Я не вижу проблемы, почему бы не использовать событие previewMouseDown на сенсорном экране. Я также не нашел никакой официальной документации Microsoft, которая не делала этого.

Во всяком случае, я больше не мог воспроизвести проблему, что касание listviewitem вызывает другое событие previeuwMouseDown шаблона другого listviewitem в списке by ....

Изменение события PrevieuwMouseDown с помощью события Touchdown!

Я рад найти решение, однако, основываясь на многочисленных онлайн-поисках, я чувствую себя там Есть много проблем с thouch на WPF, и часто неясно, какова основная причина. Как и в этом случае, я нашел решение методом проб и ошибок, но почему проблема возникает при использовании previewMouseDown, вызывает недоумение.

...