SYL*_*SYL 11 c# windows-10 windows-10-mobile uwp 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);
};
};
Run Code Online (Sandbox Code Playgroud)
该ManipulationCompleted活动无法在手机上播放ListView.处理程序内的代码永远不会被调用.它在PC上工作正常,但在手机上不起作用.我不明白为什么.
当ListView在PC上工作时,我们可以通过滚动鼠标滚轮来滚动它,但是当它在手机上工作时,没有连接到手机的鼠标设备,我们实际上滚动了ListView通过滑动.
一个ListView控件包含一个ScrollViewer这样的:
我认为问题在于ScrollViewer,当它在PC上时,它分别处理滚动和操纵事件,但是当它在手机上时,它无法区分滚动和操纵事件.
在我看来,这个操纵事件可以响应鼠标设备,但不能单手触摸.如果我们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">
Run Code Online (Sandbox Code Playgroud)
测试它,它在PC和手机上都可以正常工作.
更新:
刚刚在X1 Carbon,Lumia950上测试过,我发现Manipulation事件将用两根手指触发,结果与移动仿真器上的结果相同.