2012-09-04 17 views
21

Bir WinRT uygulamasında basit dokunma hareketlerini nasıl algılayabileceğini açıklayabilir mi? Ben GestureRecognizer sınıfını kullanarak denedim ama işe yaramadı:Basit Dokunma Hareketlerini Algıla

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

eklenir. – test

cevap

37

Eğer MainPage Sınıf size ayrı GestureRecognizer yaratmadan kullanabileceğiniz kendi Manipülasyonu Olaylar sahiptir fark olacaktır. this.ManipulationMode ayarını ManipulationModes.All olarak ayarlayarak etkinleştirebilirsiniz. Bu, Yanıtları Tapped, RightTapped, ManipulationStarting, ManipulationStarted, ManipulationDelta ve ManipulationCompleted Olayları'nda görmenizi sağlar.

Bildiğim kadarıyla bu Blog ve bunu gibi MainPage en PointerMoved, PointerReleased ve PointerPressed olaylarını işlemek gerekir bu MSDN Forum Posting göre çalışmaya GestureRecongnizer alma gibi. Eğer GestureRecongnizer eklemeden ve CrossSlideThresholds ve Yön kurarak CrossSlide Etkinlik etkinleştirmeniz gerekir Documentation göre


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; 
    } 
} 
.

CrossSlide CrossSliding destekleyecek GestureSettings özelliğinde ayarlanmalıdır: Geçen bağlantısından . CrossSliding mesafe eşikleri varsayılan olarak devre dışıdır. Bu değerleri ayarlamak için CrossSlideThresholds kullanın.

örnek:

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; 

ve emin olun size Tapped etkinliğe bir işleyici ekledik nerede görmüyorum sizin 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;