在Windows 8网格中处理滑动客户端

我正在尝试实现一个自定义控件,它包含一个带有一些canvas元素作为子元素的网格,当在网格上进行滑动操作时,我打算用canvas元素执行一些操作。 我无法处理网格的滑动,我已经在msdn – win8 Dev论坛上发布了相同的内容

我和你们在同一条船上,因为那里没有关于这是怎么做的样本,但在仔细阅读和审查MSDN文档后,如何使用C#在Windows 8商店应用程序上实现滑动手势,这就是我提出了(它适用于我的应用程序,需要向上/向下/向左/向右滑动):

首先,需要使用Manipulation事件而不是GestureRecognizer,因此在您想要处理滑动的网格上(让我们说它使得整个屏幕都能使它解释手势)以下:

我调用了网格滑动表面 ,我正在处理Y轴和X轴的操作模式:

swipingSurface.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY; 

然后连接你想要通知的操作事件,在我的情况下,我只想知道操作开始和结束时:

 swipingSurface.ManipulationStarted += OnManipulationStarted; swipingSurface.ManipulationCompleted += OnManipulationCompleted; 

在你的操控开始时做任何你想做的事情,比如如果你想要获得初始点。 但实际的技巧是在ManipulationCompleted事件中,你需要获得手势产生的Velocities,如下所示:

 public void OnManipulationCompleted(object sender, ManipulationCompletedEventArgs e) { var velocities = e.Velocities; } 

ManipulationCompletedEventArgs Velocities属性将返回ManipulationVelocities类型的结构,其中包含其他属性:

角度 :以毫秒为单位的旋转速度。

扩展 :DIPs每毫秒的扩展或缩放速度。

线性 :DIPs每毫秒的直线速度。

我实际上是在看线性速度,它是一个包含X和Y值的 ,表示手势的执行方向; 例如,如果向上滑动,您会注意到Y值为正,如果向下滑动则Y值为负; 对于X值也是如此,如果向左滑动,则X值为负,如果滑动是正确的,则X值为正,因此您可以使用这些值并检查您的滑动方向,最终点等。

希望这可以帮助。

您可以尝试在可滑动控件上设置ManipulationMode并处理Manipulation~事件。 请注意,某些控件可能会阻止UI事件的冒泡,因此如果您将控件放在Button或ScrollViewer中,则事件可能无法正常工作。

您可以查看SwipeHintThemeAnimation ,它使用GestureRecognizer连接到Rectangle控件或修改它以使用Grid控件,请参阅文档 。