我在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上工作正常,但在手机上不起作用。我不明白为什么。
答案 0 :(得分:6)
当ListView
在PC上运行时,我们可以通过滚动鼠标滚轮来滚动它,但是当它在手机上工作时,没有鼠标设备连接到手机,我们实际上滚动了{{1}通过滑动。
我认为问题在于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事件将用两根手指触发,结果与移动仿真器上的结果相同。