2012-09-04 13 views
21

¿Alguien puede explicar cómo detectar simples gestos táctiles en una aplicación WinRT? He intentado utilizar la clase GestureRecognizer pero no funcionó:Detectar gestos táctiles simples

public MainPage() 
    { 
     this.InitializeComponent(); 
     Windows.UI.Input.GestureRecognizer gr = new Windows.UI.Input.GestureRecognizer(); 
     gr.CrossSliding += gr_CrossSliding; 
     gr.Dragging += gr_Dragging; 
     gr.Holding += gr_Holding; 
     gr.ManipulationCompleted += gr_ManipulationCompleted; 
     gr.ManipulationInertiaStarting += gr_ManipulationInertiaStarting; 
     gr.ManipulationStarted += gr_ManipulationStarted; 
     gr.ManipulationUpdated += gr_ManipulationUpdated; 
     gr.RightTapped += gr_RightTapped; 
     gr.Tapped += gr_Tapped; 
     gr.GestureSettings = Windows.UI.Input.GestureSettings.ManipulationRotate | Windows.UI.Input.GestureSettings.ManipulationTranslateX | Windows.UI.Input.GestureSettings.ManipulationTranslateY | 
     Windows.UI.Input.GestureSettings.ManipulationScale | Windows.UI.Input.GestureSettings.ManipulationRotateInertia | Windows.UI.Input.GestureSettings.ManipulationScaleInertia | 
     Windows.UI.Input.GestureSettings.ManipulationTranslateInertia | Windows.UI.Input.GestureSettings.Tap; 

    } 

    void gr_Tapped(Windows.UI.Input.GestureRecognizer sender, Windows.UI.Input.TappedEventArgs args) 
    { 
     Debug.WriteLine("gr_Tapped"); 
    } 
    void gr_RightTapped(Windows.UI.Input.GestureRecognizer sender, Windows.UI.Input.RightTappedEventArgs args) 
    { 
     Debug.WriteLine("gr_RightTapped"); 
    } 
    void gr_Holding(Windows.UI.Input.GestureRecognizer sender, Windows.UI.Input.HoldingEventArgs args) 
    { 
     Debug.WriteLine("gr_Holding"); 
    } 
    void gr_Dragging(Windows.UI.Input.GestureRecognizer sender, Windows.UI.Input.DraggingEventArgs args) 
    { 
     Debug.WriteLine("gr_Dragging"); 
    } 
    void gr_CrossSliding(Windows.UI.Input.GestureRecognizer sender, Windows.UI.Input.CrossSlidingEventArgs args) 
    { 
     Debug.WriteLine("gr_CrossSliding"); 
    } 
    void gr_ManipulationUpdated(Windows.UI.Input.GestureRecognizer sender, Windows.UI.Input.ManipulationUpdatedEventArgs args) 
    { 
     Debug.WriteLine("gr_ManipulationUpdated"); 
    } 
    void gr_ManipulationStarted(Windows.UI.Input.GestureRecognizer sender, Windows.UI.Input.ManipulationStartedEventArgs args) 
    { 
     Debug.WriteLine("gr_ManipulationStarted"); 
    } 
    void gr_ManipulationCompleted(Windows.UI.Input.GestureRecognizer sender, Windows.UI.Input.ManipulationCompletedEventArgs args) 
    { 
     Debug.WriteLine("gr_ManipulationCompleted"); 
    } 
    void gr_ManipulationInertiaStarting(Windows.UI.Input.GestureRecognizer sender, Windows.UI.Input.ManipulationInertiaStartingEventArgs args) 
    { 
     Debug.WriteLine("gr_ManipulationInertiaStarting"); 
    } 
+0

No veo donde se ha añadido un controlador para el evento roscado. – test

Respuesta

37

Si usted se dará cuenta de la Clase MainPage tiene sus propios eventos de manipulación que se puede utilizar sin crear una separada GestureRecognizer. Puede habilitarlo configurando this.ManipulationMode en ManipulationModes.All. Esto le permitirá ver las respuestas en las páginas principales Tapped, RightTapped, ManipulationStarting, ManipulationStarted, ManipulationDelta y ManipulationCompleted Eventos.

En cuanto a conseguir la GestureRecongnizer a trabajar de acuerdo con esta Blog y esto MSDN Forum Posting tendrá que manejar PointerMoved, PointerReleased y PointerPressed eventos del MainPage como tal.

Windows.UI.Input.GestureRecognizer gr = new Windows.UI.Input.GestureRecognizer(); 

public MainPage() 
{ 
    this.InitializeComponent(); 
    this.PointerPressed += MainPage_PointerPressed; 
    this.PointerMoved += MainPage_PointerMoved; 
    this.PointerReleased += MainPage_PointerReleased; 
    gr.CrossSliding += gr_CrossSliding;  
    gr.Dragging += gr_Dragging;  
    gr.Holding += gr_Holding;  
    gr.ManipulationCompleted += gr_ManipulationCompleted;  
    gr.ManipulationInertiaStarting += gr_ManipulationInertiaStarting;  
    gr.ManipulationStarted += gr_ManipulationStarted;  
    gr.ManipulationUpdated += gr_ManipulationUpdated;  
    gr.RightTapped += gr_RightTapped;  
    gr.Tapped += gr_Tapped;  
    gr.GestureSettings = Windows.UI.Input.GestureSettings.ManipulationRotate | Windows.UI.Input.GestureSettings.ManipulationTranslateX | Windows.UI.Input.GestureSettings.ManipulationTranslateY |  
    Windows.UI.Input.GestureSettings.ManipulationScale | Windows.UI.Input.GestureSettings.ManipulationRotateInertia | Windows.UI.Input.GestureSettings.ManipulationScaleInertia |  
    Windows.UI.Input.GestureSettings.ManipulationTranslateInertia | Windows.UI.Input.GestureSettings.Tap; 
} 

void MainPage_PointerReleased(object sender, PointerRoutedEventArgs e) 
{ 
    var ps = e.GetIntermediatePoints(null); 
    if (ps != null && ps.Count > 0) 
    { 
     gr.ProcessUpEvent(ps[0]); 
     e.Handled = true; 
     gr.CompleteGesture(); 
    } 
} 

void MainPage_PointerMoved(object sender, PointerRoutedEventArgs e) 
{ 
    gr.ProcessMoveEvents(e.GetIntermediatePoints(null)); 
    e.Handled = true; 
} 

void MainPage_PointerPressed(object sender, PointerRoutedEventArgs e) 
{ 
    var ps = e.GetIntermediatePoints(null); 
    if (ps != null && ps.Count > 0) 
    { 
     gr.ProcessDownEvent(ps[0]); 
     e.Handled = true; 
    } 
} 

De acuerdo con la Documentation necesita habilitar el CrossSlide Evento añadiéndolo a su GestureRecongnizer y configuración de la CrossSlideThresholds y Dirección. desde el último enlace:

CrossSlide se debe establecer en la propiedad GestureSettings para admitir CrossSliding. Los umbrales de distancia CrossSliding están deshabilitados de forma predeterminada. Use CrossSlideThresholds para establecer estos valores.

ejemplo:

Windows.UI.Input.CrossSlideThresholds cst = new Windows.UI.Input.CrossSlideThresholds(); 
cst.SelectionStart = 2; 
cst.SpeedBumpStart = 3; 
cst.SpeedBumpEnd = 4; 
cst.RearrangeStart = 5; 
gr.CrossSlideHorizontally = true; 
gr.CrossSlideThresholds = cst; 
gr.CrossSliding += gr_CrossSliding; 

y asegúrese de que se agrega a su GestureSettings

gr.GestureSettings = Windows.UI.Input.GestureSettings.ManipulationRotate | Windows.UI.Input.GestureSettings.ManipulationTranslateX | 
        Windows.UI.Input.GestureSettings.ManipulationScale | Windows.UI.Input.GestureSettings.ManipulationRotateInertia | 
        Windows.UI.Input.GestureSettings.ManipulationScaleInertia | Windows.UI.Input.GestureSettings.ManipulationTranslateInertia | 
        Windows.UI.Input.GestureSettings.Tap | Windows.UI.Input.GestureSettings.CrossSlide; 
Cuestiones relacionadas