2012-09-28 15 views
15

Mam następujący kod:Uchwyt Przesuń w górę, przesuń w dół, przesuń w lewo i przesunięcie w prawo Gesty w app 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"); 
} 

Ale nie mam pojęcia, w jaki sposób korzystać z wydarzeń manipulacji. Czy ktoś może opisać, jak obsługiwać gesty przesuwać w górę, w dół, w lewo i prawo?

+1

Nie pracowałem z gestami WinRT, ale szybko rzuciłem okiem na MSDN i założyłem, że można uzyskać dostęp do różnych właściwości argumentów podczas zdarzeń "Delta" (lub innych). Na przykład 'ManipulationDeltaRoutedEventArgs.Velocities' ma zestaw danych dotyczących wejść/kątowych/skalowania wejść od użytkownika. Nie mogę powiedzieć, czy to jest "ten", na który powinieneś patrzeć, ale może da ci to początek. –

Odpowiedz

21

Zdarzenia manipulacyjne dostarczają wartości translacji. Manipulacja Delta będzie strzelać nieprzerwanie, dopóki twoje manipulacje nie zakończą się wraz z bezwładnością. W takim przypadku należy sprawdzić, czy ruch jest bezwładny, (normalny ruch nie powinien być traktowany jako przesunięcie) i wykryć różnicę między początkową a aktualną pozycją.

Po osiągnięciu progu wystrzeliwanie w dół/w dół/w lewo/w prawo. I natychmiast przerwij manipulację, aby uniknąć powtarzania tego samego zdarzenia raz za razem.

następujący kod pomoże,

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

Nie ma potrzeby wykonywania wielu zdarzeń. Po prostu użyj 'e.Cumulative.Translation.X'. –

4

Próbowałem odpowiedź przez XAML kochanka, ale nie było to prawdziwe dla mnie (IsIntertial zawsze wrócił false dla mnie). Zaimplementowałem coś innego (odpowiedziałem na poprzedni wpis pokrewnego tematu tutaj Handling Swipe Guesture in Windows 8 Grid) dla każdego, kto chciał spróbować czegoś innego.

Powiązane problemy