2012-09-28 11 views
15

tengo el siguiente código:Handle golpe arriba, deslizar el dedo hacia abajo, pase a la izquierda y derecha Gestos golpe fuerte en una aplicación 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"); 
} 

Pero no tengo ni idea sobre cómo utilizar los eventos de manipulación. ¿Alguien puede describir cómo manejar los movimientos hacia arriba, abajo, izquierda y derecha?

+1

No he trabajado con gestos de WinRT, pero al echar un rápido vistazo a MSDN, apostaría a que podría acceder a varias propiedades de los argumentos durante los eventos 'Delta' (u otros). Por ejemplo, 'ManipulationDeltaRoutedEventArgs.Velocities' tiene un conjunto de datos relativos a las entradas de dirección/ángulo/escala del usuario. No puedo decir si ese es "el que" debería estar mirando, pero tal vez le sirva para empezar. –

Respuesta

21

Los eventos de manipulación le proporcionan los valores de traducción. Manipulación Delta disparará continuamente hasta que su manipulación se complete junto con la inercia. En este caso, compruebe si el movimiento es inercial (un movimiento normal no debe considerarse deslizamiento) y detectar la diferencia entre la posición inicial y la actual.

Una vez que alcanza el umbral, activa el evento de deslizar hacia arriba/abajo/izquierda/derecha. Y detenga la manipulación de inmediato para evitar disparar el mismo evento una y otra vez.

siguiente código le ayudará,

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

No hay necesidad de múltiples eventos. Solo usa 'e.Cumulative.Translation.X'. –

4

Probé la respuesta por el amante de XAML, pero no era tan precisa para mí (IsIntertial siempre volvía falsa para mí). Implementé algo diferente (respondí a una publicación anterior de un tema relacionado aquí Handling Swipe Guesture in Windows 8 Grid) para cualquiera que quisiera probar algo diferente.

Cuestiones relacionadas