C# ListView操作已完成事件不存在';我不能打电话
我在Windows 10 UWP应用程序中有以下代码:C# ListView操作已完成事件不存在';我不能打电话,c#,windows-10,uwp,windows-10-mobile,windows-10-universal,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 &
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);
};
};
MyListView.OperationMode=OperationModes.TranslateX;
MyListView.manufactionStarted+=(s,e)=>x1=(int)e.Position.X;
MyListView.OperationCompleted+=(s,e)=>
{
x2=(int)e.Position.X;
如果(x1>x2)
{
DataController.PaneOpen(false);
};
if(x1
操作完成
事件在列表视图
中的手机上不起作用。处理程序中的代码永远不会被调用。
它在PC机上工作正常,但在手机上不工作。我不明白为什么。当
列表视图
在PC上工作时,我们可以通过滚动鼠标滚轮来滚动它,但当它在手机上工作时,没有鼠标设备连接到手机,我们实际上通过滑动来滚动列表视图
ListView
控件包含如下ScrollViewer
:
我认为问题在于这个ScrollViewer
,当它在PC上时,它分别处理滚动和操纵事件,但当它在手机上时,它无法区分滚动和操纵事件
在我看来,这个操纵事件可以响应鼠标设备,但不能响应单指触摸。如果我们在移动仿真器和模拟器上测试列表视图
,当您使用手机仿真器的单点鼠标输入
或模拟器的鼠标模式
时,操作事件工作正常,但是当您使用移动仿真器的单点触摸输入
或仿真器的基本触摸模式
时,它不起作用。有趣的是,当我们使用多点触摸输入时,操纵事件实际上在移动仿真器上仍然可以正常工作。更有趣的是,官方文件说:
如果您没有触摸屏监视器,可以使用鼠标和鼠标滚轮界面在模拟器中测试操纵事件代码
所以,它应该在真正的手机上工作。由于我现在还并没有任何设备,我无法判断它是否能在真正的手机上正常工作,我会在设备上测试后更新我的答案
但是,我们仍然可以通过如下方式处理指针事件来操作手机上的列表视图
:
<ListView x:Name="MyListView" PointerCanceled="PointerExisted" PointerEntered="PointerEntered" PointerMoved="PointerMoved" PointerExited="PointerExisted">
经过测试,它在PC和手机上都可以正常工作
更新:
刚刚在X1 Carbon,Lumia950上测试,我发现操纵事件将使用两个手指触发,结果与在移动仿真器上相同。手机上的预期行为和错误是什么?在ListView中,操纵完成事件在手机上不起作用。永远不会调用处理程序中的代码。好的,请将此更新为您的问题,是否使用触摸测试PointerMoved
和PointerExited
?我认为它们根本不会被触发。我已经尝试过你的方法,但是指针
事件不会在基本触摸模式下的模拟器中触发Emulator@JustinXL,是的,我刚刚再次测试了它,它们可能会被引发,但要小心此场景中的PointerExited
事件,如果可以垂直滚动列表视图
,则其宽度应小于设备的宽度,或者您可以将列表视图
控件作为项目测试在枢轴
控件内,则会引发PointerExit
事件。但多亏了你们,我总是一起处理pointercanced
和PointExited
事件,我单独测试了它们只是为了回答你们的问题,pointercanced
事件在我身边的模拟器上不起作用。我的模拟器版本是10586。@Ku6opr,除了PointerCanceled
事件外,它们在模拟器和模拟器上都运行良好,我还测试了PointerPressed
和PointReleased
事件,它们也可以提升,我的模拟器版本是10586,在测试这些事件之前,您是否关注了列表视图
?我怀疑自己是否以错误的方式测试了PointerCanceled
事件……这是一个很好的解决方案。我已经通过在屏幕左侧使用一个薄网格列并在其上处理操纵完成事件来解决我的任务。