2012-11-13 19 views
8

Tôi có nút trong ứng dụng. Tôi muốn nó làm những việc khác nhau tùy thuộc vào việc tôi chạm vào nó (tạm dừng hoạt ảnh) hay nhấn đúp (khởi động lại hoạt ảnh)Sự kiện Double Tap của Windows 8/XAML luôn đi trước bằng cách nhấn

tuy nhiên, khi tôi nhấn đúp, có vẻ như sẽ kích hoạt sự kiện nhấn trước và sau đó nhấn đúp liên tiếp nhanh. Có cách nào để giái quyết vấn đề này không? Đây có phải là vấn đề đã biết hay tôi đang mắc phải một sai lầm tân binh?

Chỉnh sửa: Đối với những người hỏi, tôi đang sử dụng các sự kiện TappedDoubleTapped.

+1

một số mã sẽ là ví dụ tốt bạn đang sử dụng DoubleTapped() hoặc MouseDoubleClicked(); trên suy nghĩ thứ hai tại sao bạn không chỉ có một vòi duy nhất toggling các hình ảnh động, có vẻ nhiều hơn noob người dùng thân thiện/trực quan. –

+0

Đó là bộ hẹn giờ và nhấn một lần sẽ tạm dừng bộ hẹn giờ, trong khi nhấn đúp sẽ đặt lại hoàn toàn bộ hẹn giờ. – roryok

+0

Vậy tại sao không có một lần nhấn duy nhất tạm dừng bộ hẹn giờ và nếu người dùng nhấn một lần nữa và bộ hẹn giờ bị tạm dừng, cho phép bộ hẹn giờ tiếp tục? tức là bật hẹn giờ tắt bằng một lần nhấp. –

Trả lời

4

Bạn có thể muốn xem xét cho phép thực hiện cả hai. Hãy suy nghĩ về nó như nhấp đúp vào một thư mục trong cửa sổ. Người dùng sẽ được sử dụng để một cái gì đó xảy ra trên nhấp chuột đầu tiên (làm nổi bật thư mục) và họ sẽ mong đợi nhấp đúp chuột vào cả hai đánh dấu, sau đó điều hướng.

Tất cả trong tất cả dường như là vấn đề thiết kế, không phải vấn đề kỹ thuật.

+2

bạn có thể đúng. Tôi có thể bắt nó với logic. Tôi chỉ tự hỏi nếu tôi đã sử dụng các sự kiện sai – roryok

+0

Có, quản lý để giải quyết nó với một thiết kế logic tốt hơn. Cảm ơn. – roryok

+0

Ah, không vấn đề gì :) –

16

Cho phép tạm dừng một số vào một tab. Nếu có đôi tab xảy ra sau đó sự kiện tab duy nhất loại bỏ

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

Cá nhân tôi cảm thấy đây là cách tốt nhất! –

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 
     } 
Các vấn đề liên quan