2012-09-28 10 views
15

ho il seguente codice:Maniglia scorrere verso l'alto, scorrere verso il basso, Swipe Sinistra e Destra Swipe Gestures in un'applicazione 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"); 
} 

Ma non ho idea su come utilizzare gli eventi di manipolazione. Qualcuno può descrivere come gestire i gesti scorrere verso l'alto, il basso, sinistra e destra?

+1

Non ho lavorato con i gesti WinRT, ma una rapida occhiata all'MSDN. Scommetto che è possibile accedere a varie proprietà degli argomenti durante gli eventi "Delta" (o altri). Ad esempio, 'ManipulationDeltaRoutedEventArgs.Velocities' ha un set di dati relativi agli input di direzione/angolare/ridimensionamento dall'utente. Non posso dire se quello è "quello" che dovresti guardare, ma forse ti darà un inizio. –

risposta

21

Gli eventi di manipolazione forniscono i valori di traduzione. Manipolazione Delta sparerà continuamente fino a quando la tua manipolazione sarà completata insieme all'inerzia. In questo caso, controlla se il movimento è inerziale (una mossa normale non deve essere considerata come scorrimento) e rileva la differenza tra la posizione iniziale e quella attuale.

Una volta raggiunta la soglia, attivare l'evento Su/Giù/sinistra/destra. E fermare immediatamente la manipolazione per evitare di sparare lo stesso evento ancora e ancora.

Seguendo codice vi aiuterà,

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

Non sono necessari più eventi. Basta usare 'e.Cumulative.Translation.X'. –

4

ho cercato la risposta amante XAML, ma non era quello esatto per me (IsIntertial tornava sempre false per me). Ho implementato qualcosa di diverso (ho risposto a un post precedente di un argomento correlato qui Handling Swipe Guesture in Windows 8 Grid) per chiunque volesse provare qualcosa di diverso.

Problemi correlati