11

我正在尝试实现一个自定义控件,该控件由一个带有一些画布元素作为子元素的网格组成,当在网格上进行滑动操作时,我打算对画布元素进行一些操作。我无法处理网格的滑动,我在 msdn - win8 开发论坛上发布了相同的内容

4

3 回答 3

24

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

首先,需要使用 Manipulation 事件而不是 GestureRecognizer,因此在您要处理滑动的网格上(假设您制作它以便它占用整个屏幕以便解释手势)执行下列的:

我调用了我的网格swipingSurface并且我正在处理 Y 轴和 X 轴的操作模式:

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

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

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

在操作开始时做任何你想做的事情,比如如果你想得到初始点。但实际的技巧在于 ManipulationCompleted 事件,您需要在该事件中获取手势产生的速度,如下所示:

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

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

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

-扩展:扩展或缩放速度,以每毫秒 DIP 为单位。

-线性:以每毫秒 DIP 为单位的直线速度。

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

希望这可以帮助。

于 2012-11-15T17:09:27.743 回答
1

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

于 2013-03-23T20:54:57.307 回答
1

您可以尝试在可滑动控件上设置 ManipulationMode 并处理 Manipulation~ 事件。请注意,某些控件可能会停止 UI 事件的冒泡,因此如果您说将控件放在 Button 或 ScrollViewer 内 - 这些事件可能不起作用。

于 2012-05-30T17:38:10.327 回答