2010-11-13 10 views
5

मेरे आवेदन के लिए मैं सभी निर्मित मैनिपुलेशन संभावनाओं का उपयोग करना चाहता हूं, जैसे उदा। ज़ूम। लेकिन यदि उपयोगकर्ता स्क्रीन पर 3 अंगुलियों को दबाता है तो मैं एक विशिष्ट यूआई तत्व दिखाना चाहता हूं। तो यह जांचने का सबसे अच्छा तरीका क्या है कि उपयोगकर्ता ने एक ही समय में 3 अंगुलियों को दबाया है और स्क्रीन पर एक-दूसरे के आगे? (अंतर्निर्मित हेरफेर possibilties अक्षम करने के बिना)।स्क्रीन पर 3 अंगुलियों को कैसे रखा गया है, यह जांचने के लिए कि

मेरा पहला दृष्टिकोण टचडाउन ईवेंट को मेरे लेआउट के शीर्ष ग्रिड तत्व पर पंजीकृत करना था। घटना हैंडलर में मुझे संपर्क मिलता है। लेकिन वहां क्या करना है?

बस जांचें कि संपर्क एक फिंगरप्रिंट है, इसे एक सूची में स्टोर करें, और जांच करें कि सूची में पहले से ही दो समान तथ्य हैं या नहीं?

या क्या कोई और सेक्सी समाधान है?

धन्यवाद!

संपादित करें:

जवाब के बाद मैं दो तरीकों लिखा है:

private void OnContactDown(object sender, ContactEventArgs e) 
     { 
      if (this.ContactsOver.Count == 3) 
      { 
       Console.WriteLine("3 contacts down. Check proximity"); 

       if (areNear(this.ContactsOver)) 
       { 
        Console.WriteLine("3 fingers down!"); 
       } 
      } 
     } 

     private Boolean areNear(ReadOnlyContactCollection contacts) 
     { 
      if (Math.Abs(contacts.ElementAt(0).GetCenterPosition(this).X - contacts.ElementAt(1).GetCenterPosition(this).X) < 100 && 
       Math.Abs(contacts.ElementAt(0).GetCenterPosition(this).Y - contacts.ElementAt(1).GetCenterPosition(this).Y) < 100 && 
       Math.Abs(contacts.ElementAt(1).GetCenterPosition(this).X - contacts.ElementAt(2).GetCenterPosition(this).X) < 100 && 
       Math.Abs(contacts.ElementAt(1).GetCenterPosition(this).Y - contacts.ElementAt(2).GetCenterPosition(this).Y) < 100 && 
       Math.Abs(contacts.ElementAt(0).GetCenterPosition(this).X - contacts.ElementAt(2).GetCenterPosition(this).X) < 100 && 
       Math.Abs(contacts.ElementAt(0).GetCenterPosition(this).Y - contacts.ElementAt(2).GetCenterPosition(this).Y) < 100) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 

वे फिर से लिखा जाना है, लेकिन यह काम करता है। और दहलीज (एटीएम 100) समायोजित किया जाना है।

+1

अपनी खुद की सूची में 'संपर्क' को संग्रहीत करने से सावधान रहें। 'संपर्क 'या खेतों के उपयोग पर कोई भी कॉल उंगली के बाद एक अपवाद फेंक देगी जिसके कारण' संपर्क 'अब नीचे नहीं आ गया है। – Donnie

उत्तर

2

सभी सतह नियंत्रणों पर एक संपत्ति है जिसमें संपर्कों की संख्या शामिल है। प्रॉपर्टी आपकी आवश्यकता के आधार पर संपर्क या इसके किसी भी प्रकार का है, http://msdn.microsoft.com/en-us/library/microsoft.surface.presentation.controls.surfacecontrol_properties(v=Surface.10).aspx

उदाहरण के लिए आप अपने संपर्कडाउन ईवेंट हैंडलर में उस प्रोपरी का गणना मान देख सकते हैं। अपनी दूरी की जांच करने के लिए, बस उन पर एक GetPosition करें और अंक पर मूल वेक्टर गणित का उपयोग करें।

+0

धन्यवाद यह बहुत उपयोगी लगता है। मैं आज रात कोशिश कर रहा हूं और परिणाम की रिपोर्ट करूंगा। – RoflcoptrException

+0

मैंने आपके समाधान की जांच करने के तरीकों को लिखा है: संपादन देखें – RoflcoptrException

संबंधित मुद्दे