2016-02-04 2 views
11

У меня есть этот код в приложении 10 UWP Windows:ListView ManipulationCompleted событие не работает на телефоне

MyListView.ManipulationMode = ManipulationModes.TranslateX; 
MyListView.ManipulationStarted += (s, e) => x1 = (int)e.Position.X; 
MyListView.ManipulationCompleted += (s, e) => 
{ 
    x2 = (int)e.Position.X; 
    if (x1 > x2) 
    { 
     DataController.PaneOpen(false); 
    }; 
    if (x1 < x2) 
    { 
     DataController.PaneOpen(true); 
    }; 
}; 

ManipulationCompleted событие не работает на телефоне в ListView. Код внутри обработчика никогда не вызван. Он отлично работает на ПК, но не работает на телефоне. Я не понимаю, почему.

+0

Какое ожидаемое поведение и что не так на телефоне? – kennyzx

+0

манипулирование завершено событие не работает на телефоне в ListView. код внутри обработчика никогда не вызывается. – SYL

+0

ОК, обновите это на свой вопрос, пожалуйста, – kennyzx

ответ

6

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

ListView управления содержит ScrollViewer так: enter image description here

Я думаю, что проблема с этим ScrollViewer, когда он находится на компьютере, он обрабатывает скроллинг и манипуляция события отдельно, но когда он находится на телефоне, он не может отличать события прокрутки и манипуляции.

На мой взгляд, это событие манипуляции может реагировать на мышь, но не на одно касание пальца. Яснее, если мы проверим ListView на Mobile Emulator и симуляторе, когда вы используете Single Point Mouse Input эмулятора телефона или Mouse Mode симулятора, события манипуляции работают нормально, но когда вы используете Single Point Touch Input мобильного эмулятора или Basic Touch Mode симулятора, он не Работа. Интересная вещь: события манипуляции на самом деле все еще отлично работают на мобильном эмуляторе, когда мы используем Multi-Touch Input. Более интересная вещь, официальные документы из Using manipulation events говорит:

Если вы не имеете монитор с сенсорным экраном, вы можете проверить свой код события манипуляции в тренажере с использованием интерфейса колеса мыши и мыши.

Итак, предполагается, что он работает на реальном телефоне. Поскольку у меня пока нет устройства, я не могу сказать, хорошо ли он работает на реальном телефоне, я обновлю свой ответ после проверки его на устройстве.

Но, мы можем манипулировать ListView по телефону с помощью обработки событий Pointer так:

<ListView x:Name="MyListView" PointerCanceled="PointerExisted" PointerEntered="PointerEntered" PointerMoved="PointerMoved" PointerExited="PointerExisted"> 

испытан, он прекрасно работает как на ПК и телефоне.

Update:

Просто протестирована на X1 Carbon, Lumia950, я обнаружил, что событие Манипуляция будет срабатывать с помощью двух пальцев, то результат будет такой же, как это было на мобильном эмуляторе.

+0

Вы тестировали 'PointerMoved' и' PointerExited' с прикосновениями? Я не думаю, что они вообще воспитываются. –

+0

Пробовали ваш подход, но события «Pointer» не поднимаются в Simulator с помощью «Basic Touch Mode» и на эмуляторе – Ku6opr

+0

@JustinXL, да, и я просто проверил его снова, они могут быть подняты, но будьте осторожны с ' PointerExited' для этого сценария, если «ListView» можно прокручивать в вертикальном направлении, он должен иметь ширину «Width» меньше ширины устройства, или вы можете протестировать элемент «ListView» внутри элемента «Pivot» как элемент, событие «PointerExited» будет поднято. Но благодаря вам я всегда обрабатывал события «PointerCanceled» и «PointExited» вместе, я тестировал их отдельно только для вашего вопроса, событие «PointerCanceled» не работает на эмуляторе на моей стороне. И моя версия эмулятора - 10586. –

Смежные вопросы