我正在尝试实现一个自定义控件,该控件由一个带有一些画布元素作为子元素的网格组成,当在网格上进行滑动操作时,我打算对画布元素进行一些操作。我无法处理网格的滑动,我在 msdn - win8 开发论坛上发布了相同的内容
3 回答
我和你们在同一条船上,因为那里没有关于如何完成的示例,但是在仔细阅读并仔细检查了关于如何使用 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 值为正,因此您可以使用这些值并检查您的滑动方向、最终点等.
希望这可以帮助。
您可以检查SwipeHintThemeAnimation
用于GestureRecognizer
连接到 Rectangle 控件或修改它以使用您的 Grid 控件,请参阅文档。
您可以尝试在可滑动控件上设置 ManipulationMode 并处理 Manipulation~ 事件。请注意,某些控件可能会停止 UI 事件的冒泡,因此如果您说将控件放在 Button 或 ScrollViewer 内 - 这些事件可能不起作用。