2012-03-28 2 views
1

Ich habe ein Problem mit dem Gestehandling bekommen.WP7 TouchPanel Gestenbehandlung

Ich habe es vor allem nach diesem Tutorial:

http://www.nickharris.net/2010/11/using-touchpanel-for-gestures-in-windows-phone-7/

Das ist meine Remote.xaml Datei:

<UserControl x:Class="EnergyRadio.Remote" 
.... 
ManipulationCompleted="StackPanel_ManipulationCompleted"> 
     <Grid x:Name="LayoutRoot" Background="Transparent" > 
     </Grid> 
</UserControl> 

Und das ist Remote.xaml.cs:

public Remote() 
    { 
     InitializeComponent(); 
     TouchPanel.EnabledGestures = GestureType.VerticalDrag | GestureType.HorizontalDrag; 
    } 

    private void StackPanel_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e) 
    { 
     //Check if touch Gesture is available 
     if (TouchPanel.IsGestureAvailable) 
     { 
      // Read the gesture so that you can handle the gesture type 
      GestureSample gesture = TouchPanel.ReadGesture(); 
      switch (gesture.GestureType) 
      { 
       case GestureType.VerticalDrag: 
        MessageBox.Show("vertikal"); 
        break; 
       case GestureType.HorizontalDrag: 
        MessageBox.Show("horizontal"); 
        break; 
       default: 
        //do something 
        break; 
      } 
     } 
    } 

Es spielt keine Rolle, wie ich meinen Finger über das Telefon wische, es gibt mir wieder horizontal . Aber das sollte der erste Schritt gewesen sein. Was ich eigentlich brauche, sind vier Richtungen ... das heißt oben, unten, rechts und links.

Aber ich kann diese Gesturtypen nicht finden .. hat also jemand eine Idee?

es sollte wie folgt aussehen:

  switch (gesture.GestureType) 
      { 
       case "GesturType.Up": 
        MessageBox.Show("Volume Up"); 
        break; 
       case "GesturType.Down": 
        MessageBox.Show("Volume Down"); 
        break; 
       case "GesturType.Right": 
        MessageBox.Show("Next Channel"); 
        break; 
       case "GesturType.Left": 
        MessageBox.Show("Previous Channel"); 
        break; 
       default: 
        //do something 
        break; 
      } 

Dank.

Antwort

2

Ich benutze eine andere Art der Handhabung Geste .. nicht die XNA Weg. Sie tun dies

<Rectangle x:Name="HelloRect"> 
     <toolkit:GestureService.GestureListener> 
     <toolkit:GestureListener DragStarted="DragStarted_EventHandler" DragCompleted="DragCompleted_EventHandler" /> 
     </toolkit:GestureService.GestureListener> 
    </Rectangle> 

Dann im Code können Sie die GestureService.GestureListener

zum Beispiel versuchen, u wie die Drag-Ereignis innerhalb eines Rechtecks ​​erkennen hinter Ihnen Event-Handler für die Gesten

haben
private void DragStarted_EventHandler(object sender, DragStartedGestureEventArgs e) 
{ 
    this.HelloRect.Fill = new SolidColorBrush(Colors.White); 
} 

private void DragCompleted_EventHandler(object sender, DragCompletedGestureEventArgs e) 
{ 
    this.HelloRect.Fill = new SolidColorBrush(Colors.Black); 
} 

Update: dieses Tutorial ist gut: http://windowsphonegeek.com/articles/WP7-GestureService-in-depth--key-concepts-and-API

Sie könnten einige der referen überprüfen möchten ces für das, was Sie für die Veranstaltung params werden immer: http://www.mindscapehq.com/Help/PhoneElements/html/2f4dc2f0-f612-6a89-092e-f65c243caded.htm und http://www.mindscapehq.com/Help/PhoneElements/html/96092851-e003-6423-389c-58d16281122b.htm

Es gibt auch ein Drag Delta Ereignis, das man sich in kann. hoffe, dass es in irgendeiner Weise hilft .. ich bin nicht sehr vertraut mit dem Touch-Panel-Sache .. sorry darüber .. Sie möchten vielleicht noch ein paar Antworten warten

Von der Drag-Start und Drag-Ende Koordinaten können Sie schließen die Richtung des Drag

..Ich glaube, Sie leichten Schlag Ereignis suchen in .. ein weiteres gutes Tutorial

http://johnhforrest.com/2010/09/windows-phone-7-gestures/

Update erneut: die FlickGestureEventArgs enthält eine Eigenschaft Richtung, die vom Typ System.Windows.Controls.Orientationhttp://msdn.microsoft.com/en-us/library/system.windows.controls.orientation.aspx

von dort aus können Sie die Richtung der leichten Schlag

private void Flick_EventHandler(object sender, FlickGestureEventArgs e) 
{ 
    if (e.Direction == Orientation.Horizontal) 
    { 
     if (e.HorizontalVelocity < 0) 
     { 
      //Right flick 
     } 
     else 
     { 
      //Left flick 
     } 
    } 
    else 
    { 
     if (e.VerticalVelocity < 0) 
     { 
      //Up flick 
     } 
     else 
     { 
      //Down flick 
     } 
    } 
} 

Viel Glück und gute Nacht bestimmen ..

Update:

Ich habe gerade gesehen, sollten Sie nicht Schalter Fälle für die GestureType Aufzählung verwenden ... sie sind Integer-Typen

für eine Liste der Geste Typ siehe

http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.input.touch.gesturetype.aspx

+0

Danke vielmals! Ich werde es ausprobieren. aber gerade jetzt habe ich ein anderes projekt los, also kann ich es nicht bis montag versuchen ... – MrTouch

+0

ich habe versucht, den flick Event zu implementieren. Aber wenn ich versuche zu debuggen passiert nichts ... es erkennt das Ereignis nicht ... oder er versteht nicht, dass ich einfach das Telefon umgelegt habe ... es ist dasselbe mit den anderen, die du vorgeschlagen hast ... – MrTouch

+1

I musste ein Rechteck um das Toolkit in der XAML hinzufügen. aber jetzt funktioniert es !! Vielen Dank :) – MrTouch