2012-09-28 61 views
15

我有以下代碼:手柄向上輕掃,可向下滑動,向左滑動和向右滑動,即可手勢在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"); 
} 

但我對如何使用操作事件不知道。你可以描述如何處理手勢向上,向下,向左或向右滑動嗎?

+1

我沒有使用過WinRT手勢,但是快速瀏覽一下MSDN,我會打賭你可以在'Delta'(或其他)事件期間訪問參數的各種屬性。例如'ManipulationDeltaRoutedEventArgs.Velocities'具有一組關於來自用戶的方向/角度/標度輸入的數據。我不能說這是你應該看到的「那個」,但也許它會給你一個開始。 –

回答

21

操作事件爲您提供翻譯值。操縱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(); 
      } 
     } 
    } 
+3

不需要多個活動。只需使用'e.Cumulative.Translation.X'。 –

4

我試圖通過XAML情人的答案,但它不是爲我準確的(IsIntertial總是回來假對我來說)。對於想要嘗試不同的人,我實施了一些不同的東西(我回復了以前相關主題的帖子Handling Swipe Guesture in Windows 8 Grid)。