2012-11-13 8 views
8

私はアプリ内にボタンを持っています。Windows 8/XAMLダブルタップイベントは常にタップで始まる

ただし、ダブルタップすると、最初にタップイベントが発生したように見えますが、タップするとアニメーションが再開されます。すばやく連続してダブルタップします。これを回避する方法はありますか?これは既知の問題ですか、私は新人ミスですか?

編集:質問すると、私はTappedDoubleTappedイベントを使用しています。

+1

を排除して発生いくつかのコードが良い例だろうDoubleTapped()またはMouseDoubleClicked()を使用していますか?第2の考えでは、アニメーションを切り替えるタップを1つだけ持たないのはなぜですか? –

+0

これはタイマーで、シングルタップはタイマーを一時停止し、ダブルタップは完全にリセットします。 – roryok

+0

だから、一度タップしてもタイマーを一時停止させないでください。ユーザーが再びタップしてタイマーを一時停止すると、タイマーは続行されますか?ワンクリックでタイマーをオフに切り替える。 –

答えて

4

あなたはそれを両方にすることを検討したいかもしれません。ウィンドウ内のフォルダをダブルクリックするように考えてみてください。ユーザーは、最初のクリック(フォルダの強調表示)で何か起こっていることに慣れ、ダブルクリックが強調表示され、次にナビゲートすることを期待しています。

まったく問題は技術的なものではなく、設計上の問題のようです。

+2

あなたは正しいかもしれません。私はロジックでそれをキャッチすることができるかもしれません。私はちょうど私が間違ったイベントを使用していたかどうか疑問に思った – roryok

+0

はい、より良い論理設計でそれを解決するために管理されます。ありがとう。 – roryok

+0

ああ、問題はありません:) –

16

単一のタブにいくつかの一時停止を与えます。二重のタブがある場合は、1つのタブのイベントが

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

私は個人的にはこれが最良の方法だと感じています!! –

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 
     } 
関連する問題