在Windows 8网格中处理滑动手势

时间:2012-05-29 11:36:22

标签: c# xaml windows-8 windows-runtime winrt-xaml

我正在尝试实现一个自定义控件,该控件由一个带有一些canvas元素作为子元素的网格组成。当在网格上进行滑动操作时,我打算用canvas元素执行一些操作。 我无法处理网格的滑动,我已经发布了相同的 msdn - win8 Dev forum

3 个答案:

答案 0 :(得分:24)

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

首先,不需要使用GestureRecognizer,而是需要使用操纵事件,因此在您想要处理滑动的网格上(让我们说它使它占据整个屏幕以便它解释手势) )执行以下操作:

我调用了我的网格 swipingSurface ,我正在处理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 类型的结构,其中包含其他属性:

- Angular :旋转速度,单位为度/毫秒。

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

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

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

希望这有帮助。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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