2012-11-13 5 views
8

Ich habe eine Schaltfläche in einer App. Ich möchte, dass es verschiedene Dinge macht, je nachdem, ob ich es antippen (eine Animation pausieren) oder doppeltippe (Animation neu starten)Windows 8/XAML Double Tap-Ereignis immer durch Tippen vorangehen

aber wenn ich zweimal tippe, scheint es das Tap-Ereignis zuerst und dann das zu feuern Doppeltippen in schneller Folge. Gibt es einen Weg dahin? Ist das ein bekanntes Problem oder mache ich einen Anfängerfehler?

Edit: Für diejenigen, die Fragen, verwende ich die Tapped und DoubleTapped Ereignisse.

+1

einige Code wäre gut, z.B. verwenden Sie DoubleTapped() oder MouseDoubleClicked(); auf den zweiten Gedanken, warum haben Sie nicht nur den einzigen Tipp, um die Animation umschalten, scheint viel mehr benutzerfreundlich/intuitiv Noob. –

+0

Es handelt sich um einen Timer, und durch einmaliges Antippen wird der Timer angehalten, während ein Doppeltip den Timer vollständig zurücksetzt. – roryok

+0

Warum also nicht einfach auf den Timer tippen? Wenn der Benutzer einmal tippt und der Timer pausiert, darf der Timer weiterlaufen? d. h., schalten Sie den Timer mit einem einzigen Klick aus. –

Antwort

4

Sie könnten prüfen, ob Sie beides tun können. Denken Sie darüber nach wie ein Doppelklick auf einen Ordner in Windows. Die Benutzer sind daran gewöhnt, dass beim ersten Klick etwas passiert (Hervorhebung des Ordners) und sie erwarten, dass der Doppelklick sowohl markiert als auch navigiert wird.

Alles in allem scheint es ein Design-Problem, kein technisches Problem.

+2

könnte man recht haben. Ich kann es vielleicht mit Logik verstehen. Ich fragte mich nur, ob ich die falschen Ereignisse verwendete – roryok

+0

Ja, es geschafft, es mit einem besseren Logik-Design zu lösen. Vielen Dank. – roryok

+0

Ah, kein Problem :) –

16

Geben Sie die Pause auf einzelne Registerkarte. Wenn es doppelt so hoch ist auftreten und dann auf das einzelne Register Ereignis eliminiert

bool singleTap; 
    private async void control_Tapped_1(object sender, TappedRoutedEventArgs e) 
    { 
     this.singleTap = true; 
     await Task.Delay(200); 
     if (this.singleTap) 
     { 
       // Single tab Method . 
     } 
    } 

    private void control_DoubleTapped_1(object sender, DoubleTappedRoutedEventArgs e) 
    { 
     this.singleTap = false; 

     // Double tab Method 
    } 
+0

Ich persönlich fühle, das ist der beste Weg dazu !! –

0
[System.Runtime.InteropServices.DllImport("user32.dll")] 
static extern uint GetDoubleClickTime(); 
    bool _singleTapped = false; 

     //Tapped event handler 
     private async void control_Tapped(object sender, TappedRoutedEventArgs e) 
     { 
     _singleTapped = true; 
      //var x = GetDoubleClickTime(); 
      //GetDoubleClickTime() gets the maximum number of milliseconds that can elapse between a first click and a second click 
      await Task.Delay(TimeSpan.FromMilliseconds(GetDoubleClickTime())); 

      if (!_singleTapped) 
      { return; } 
      //SingleTapped code 
     } 

     //DoubleTapped event handler 
     private async void control_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e) 
     { 
      _singleTapped = false; 
      //DoubleTapped code 
     }