2012-11-13 29 views
8

से पहले मैं एक अनुप्रयोग में एक बटन मिल गया है। मैं इसे अलग-अलग चीजों को करना चाहता हूं कि मैं इसे टैप करता हूं (एनीमेशन रोकें) या डबल-टैप करें (एनीमेशन को पुनरारंभ करें)विंडोज 8/XAML डबल टैप, हमेशा नल

हालांकि, जब मैं डबल-टैप करता हूं, तो यह पहले टैप ईवेंट को आग लग रहा है और फिर त्वरित उत्तराधिकार में दो बार टैप करें। क्या इसके चारों ओर एक रास्ता है? क्या यह एक ज्ञात मुद्दा है या क्या मैं एक रूकी गलती कर रहा हूं?

संपादित करें: उन लोगों के लिए, मैं Tapped और DoubleTapped ईवेंट का उपयोग कर रहा हूं।

+1

कुछ कोड अच्छा उदाहरण होगा क्या आप DoubleTapped() या MouseDoubleClicked() का उपयोग कर रहे हैं; दूसरा विचार क्यों तुम सिर्फ एनीमेशन टॉगल एक टैप की जरूरत नहीं है पर, और अधिक noob उपयोगकर्ता के अनुकूल/सहज लगता है। –

+0

यह एक टाइमर है, और एक टैप घड़ी रुक जाता है, जबकि एक दो बार स्पर्श करें यह पूरी तरह से रीसेट करता है। – roryok

+0

तो क्यों नहीं एक टैप टाइमर रोकें, और यदि उपयोगकर्ता एक बार फिर से टैप करता है और टाइमर रोका जाता है, तो टाइमर जारी रखने की अनुमति दें? यानी एक क्लिक के साथ टाइमर को टॉगल करें। –

उत्तर

4

आप इसे दोनों दे विचार करना चाह सकते। इसके बारे में सोचें विंडोज़ में एक फ़ोल्डर को डबल क्लिक करना। उपयोगकर्ताओं को पहले क्लिक (फ़ोल्डर को हाइलाइट करने) पर कुछ होने के लिए उपयोग किया जाएगा और वे दोनों हाइलाइट पर डबल क्लिक की उम्मीद करेंगे, फिर नेविगेट करें।

सब कुछ एक डिजाइन समस्या की तरह लगता है, तकनीकी नहीं।

+2

आप सही हो सकता है। मैं तर्क के साथ इसे पकड़ने में सक्षम हो सकता है। मैंने सोचा कि क्या मैं गलत घटनाओं का उपयोग कर रहा था – roryok

+0

हां, इसे बेहतर तर्क डिजाइन के साथ हल करने में कामयाब रहा। धन्यवाद। – roryok

+0

आह, कोई समस्या नहीं :) –

16

ही टैब के लिए कुछ विराम दे। अगर वहाँ डबल है टैब तो तब हो ही टैब घटना सफाया

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 
     }