[英]Windows Phone 8.1 Universal Apps: ManipulationCompleted event doesn't fire
[英]ListView ManipulationCompleted event doesn't work on phone
我在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上工作正常,但在手机上不起作用。 我不明白为什么。
当ListView
在PC上运行时,我们可以通过滚动鼠标滚轮来滚动它,但是当它在手机上工作时,没有鼠标设备连接到手机,我们实际上通过滑动滚动ListView
。
ListView
控件包含一个ScrollViewer
如下所示:
我认为问题在于这个ScrollViewer
,当它在PC上时,它分别处理滚动和操纵事件,但是当它在手机上时,它无法区分滚动和操纵事件。
在我看来,这个操纵事件可以响应鼠标设备,但不能单手触摸。 如果我们在移动模拟器和模拟器上测试ListView
,当您使用手机模拟器的Single Point Mouse Input
或模拟器的Mouse Mode
时,操作事件可以正常工作,但是当您使用移动模拟器的Single Point Touch Input
或Basic Touch Mode
时更清楚模拟器的Basic Touch Mode
,它不起作用。 有趣的是, 当我们使用Multi-Touch Input
时 , 操作事件在移动模拟器上实际上仍能正常工作 。 更有趣的是, 使用操纵事件的官方文档说:
如果您没有触摸屏显示器,则可以使用鼠标和鼠标滚轮界面在模拟器中测试操作事件代码。
所以,它应该适用于真正的手机。 由于我现在没有任何设备,我不知道它是否在真正的手机上工作正常,我会在设备上测试后更新我的答案。
但是 ,我们仍然可以通过处理Pointer
的事件来操纵手机上的ListView
,如下所示:
<ListView x:Name="MyListView" PointerCanceled="PointerExisted" PointerEntered="PointerEntered" PointerMoved="PointerMoved" PointerExited="PointerExisted">
测试它,它在PC和手机上都可以正常工作。
更新:
刚刚在X1 Carbon,Lumia950上测试过,我发现Manipulation事件将用两根手指触发,结果与移动仿真器上的结果相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.