【问题标题】:Handling Swipe Guesture in Windows 8 Grid在 Windows 8 网格中处理滑动手势
【发布时间】:2012-05-29 11:36:22
【问题描述】:

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

【问题讨论】:

  • 我试图处理移动的指针,输入代表来模拟滑动,但我无法区分 Right->Left 和 Left->Right 手势。我不知道要为网格设置 GestureRecoginizer 对象。

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


【解决方案1】:

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

首先,需要使用 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 Velocity 属性将返回一个 ManipulationVelocities 类型的结构,其中包含其他属性:

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

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

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

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

希望这会有所帮助。

【讨论】:

  • 好吧,多亏了你,刷卡部分解决了。但现在我需要解决一个问题(不知道你是否也解决了它)。滑动不适用于空白区域(假设您有一个网格,其中包含空单元格......即使您在网格或父项中捕获这些事件,您也无法在这些单元格上滑动)
  • @Tiago Almeida 您是否在网格为空时收到所有事件?
  • @RajmohanKathiresan 最终我已经解决了。事实证明,您需要有背景才能接收事件。即使该背景设置为透明。
  • 新手问题;有没有办法在没有代码隐藏的情况下做到这一点?
  • 这在 Windows 笔记本电脑中使用鼠标指针时工作正常,但不适用于 Windows 平板电脑/刺激器中的触摸。请帮忙
【解决方案2】:

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

【讨论】:

  • 谢谢你,我会试试的,你能指导我为网格分配一个手势吗? geustureRecorgizer = new GestureRecognizer(); geustureRecorgizer.CrossSlideHorizontally = true; geustureRecorgizer.GestureSettings = GestureSettings.CrossSlide; geustureRecorgizer.CrossSliding += new TypedEventHandler<GestureRecognizer, CrossSlidingEventArgs>(Guesture_Sliding);如何将此手势分配给网格
  • 对不起,我还没有使用 GestureRecognizer。
【解决方案3】:

您可以查看使用GestureRecognizer 连接到矩形控件的SwipeHintThemeAnimation 或修改它以使用您的网格控件,请参阅the documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    相关资源
    最近更新 更多