在WinRT应用程序中处理向上滑动,向下滑动,向左滑动和向右滑动手势

我有以下代码:

public MainPage() { this.InitializeComponent(); this.ManipulationStarting += MainPage_ManipulationStarting; this.ManipulationStarted += MainPage_ManipulationStarted; this.ManipulationInertiaStarting += MainPage_ManipulationInertiaStarting; this.ManipulationDelta += MainPage_ManipulationDelta; this.ManipulationCompleted += MainPage_ManipulationCompleted; } void MainPage_ManipulationStarting(object sender, ManipulationStartingRoutedEventArgs e) { Debug.WriteLine("MainPage_ManipulationStarting"); } void MainPage_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e) { Debug.WriteLine("MainPage_ManipulationStarted"); } void MainPage_ManipulationInertiaStarting(object sender, ManipulationInertiaStartingRoutedEventArgs e) { Debug.WriteLine("MainPage_ManipulationInertiaStarting"); } void MainPage_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) { Debug.WriteLine("MainPage_ManipulationDelta"); } void MainPage_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e) { Debug.WriteLine("MainPage_ManipulationCompleted"); } 

但我不知道如何使用操纵事件。 你能描述一下如何处理向上,向下,向左和向右滑动的手势吗?

操纵事件为您提供翻译值。 操纵Delta将持续射击,直到您的操纵与惯性一起完成。 在这种情况下,检查移动是否是惯性的(正常移动不应被视为滑动)并检测初始位置和当前位置之间的差异。

达到阈值后,触发向上/向下/向左/向右滑动事件。 并立即停止操纵,以避免一次又一次地发射相同的事件。

以下代码将帮助您,

  private Point initialpoint; private void Grid_ManipulationStarted_1(object sender, ManipulationStartedRoutedEventArgs e) { initialpoint = e.Position; } private void Grid_ManipulationDelta_1(object sender, ManipulationDeltaRoutedEventArgs e) { if (e.IsInertial) { Point currentpoint = e.Position; if (currentpoint.X - initialpoint.X >= 500)//500 is the threshold value, where you want to trigger the swipe right event { System.Diagnostics.Debug.WriteLine("Swipe Right"); e.Complete(); } } } 

我尝试了XAML爱人的答案,但对我来说这并不准确(IsIntertial总是对我不利)。 对于想要尝试不同的东西的人,我实现了一些不同的东西(我回复了之前在Windows 8 Grid中处理Swipe Guesture的相关主题的post)。

看看GestureRecognizer .CrossSliding事件。 还有EdgeGesture类和样本: EdgeGesture样本 , 手势样本 。