ListView ManipulationCompleted事件在手机上不起作用

时间:2016-02-04 12:06:34

标签: c# windows-10 uwp windows-10-mobile windows-10-universal

我在Windows 10 UWP应用程序中有此代码:

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的手机上无效。处理程序内的代码永远不会被调用。 它在PC上工作正常,但在手机上不起作用。我不明白为什么。

1 个答案:

答案 0 :(得分:6)

ListView在PC上运行时,我们可以通过滚动鼠标滚轮来滚动它,但是当它在手机上工作时,没有鼠标设备连接到手机,我们实际上滚动了{{1}通过滑动。

ListView控件包含ListView,如下所示: enter image description here

我认为问题在于ScrollViewer,当它在PC上时,它会单独处理滚动和操作事件,但是当它在手机上时,它无法区分滚动事件和操纵。

在我看来,这个操纵事件可以响应鼠标设备,但不能单手触摸。如果我们在移动模拟器和模拟器上测试ScrollViewer更清楚,当您使用电话模拟器的ListView或模拟器的Single Point Mouse Input时,操作事件可以正常工作,但是当您使用{时{1}}移动模拟器或Mouse Mode模拟器,它不起作用。有趣的是,当我们使用Single Point Touch Input 时,操作事件在移动模拟器上实际上仍能正常工作。更有趣的是,Using manipulation events的官方文档说:

  

如果您没有触摸屏显示器,则可以使用鼠标和鼠标滚轮界面在模拟器中测试操作事件代码。

所以,它应该在真正的手机上工作。由于我现在没有任何设备,我无法判断它是否在真正的手机上工作正常,我会在设备上测试后更新我的答案。

但是,我们仍然可以通过处理Basic Touch Mode这样的事件来操纵手机上的Multi-Touch Input

ListView

经测试,它在PC和手机上都能正常工作。

<强>更新

刚刚在X1 Carbon,Lumia950上测试过,我发现Manipulation事件将用两根手指触发,结果与移动仿真器上的结果相同。