Ответ 1
Когда a ListView
работает на ПК, мы можем прокручивать его, прокручивая колесо мыши, но когда он работает на телефоне, к телефону не подключено устройство мыши, мы на самом деле прокручиваем ListView
путем прокрутки.
A ListView
содержит ScrollViewer
:
Я думаю, что проблема заключается в этом ScrollViewer
, когда он находится на ПК, он обрабатывает события прокрутки и манипуляции отдельно, но когда он находится на телефоне, он не может отличать события прокрутки и манипуляции.
На мой взгляд, это событие манипуляции может реагировать на устройство Mouse, но не на одно касание пальца. Яснее, если мы протестируем ListView
на мобильном эмуляторе и симуляторе, когда вы используете Single Point Mouse Input
эмулятора телефона или Mouse Mode
симулятора, события манипуляции работают нормально, но когда вы используете Single Point Touch Input
мобильного эмулятора или Basic Touch Mode
симулятора, он не работает. Интересно, что события манипуляции на самом деле все еще отлично работают на мобильном эмуляторе, когда мы используем Multi-Touch Input
. Более интересно то, что официальные документы Использование событий манипуляции говорят:
Если у вас нет сенсорного экрана, вы можете протестировать свой код события манипуляции в симуляторе с помощью интерфейса мыши и мыши.
Итак, он должен работать на реальном телефоне. Поскольку у меня пока нет устройства, я не могу сказать, хорошо ли он работает на реальном телефоне, я обновлю свой ответ после проверки его на устройстве.
Но, мы все еще можем манипулировать ListView
на телефоне, обрабатывая события Pointer
следующим образом:
<ListView x:Name="MyListView" PointerCanceled="PointerExisted" PointerEntered="PointerEntered" PointerMoved="PointerMoved" PointerExited="PointerExisted">
Протестировано, оно отлично работает как на ПК, так и на телефоне.
Update:
Только что протестированный на X1 Carbon, Lumia950, я обнаружил, что событие Manipulation будет запущено двумя пальцами, результат будет таким же, как на мобильном эмуляторе.