2012-05-29 10 views
11

मैं बच्चों के रूप में कुछ के लिए कैनवस तत्वों, एक कड़ी चोट कार्रवाई ग्रिड पर किया जाता है के साथ एक ग्रिड होता है जो एक कस्टम नियंत्रण लागू करने के लिए कोशिश कर रहा हूँ, मैं कैनवास के साथ कुछ आपरेशन पहिले से करने का इरादा कर रहा हूँ तत्वों। मैं ग्रिड के लिए कड़ी चोट संभाल करने में असमर्थ हूँ, मैं msdn - win8 Dev forumWindows 8 में स्वाइप Guesture हैंडलिंग ग्रिड

+0

मैं सूचक को संभालने के लिए चले गए, कड़ी चोट की नकल करने के प्रतिनिधियों में प्रवेश करने की कोशिश की, लेकिन मैं अलग करने के लिए दाएँ> वामपंथियों और बाएँ> राइट इशारा असमर्थ हूँ। मुझे ग्रिड के लिए जेस्चररेकोजिनिज़र ऑब्जेक्ट सेट करने के बारे में पता नहीं है। –

उत्तर

24

मैं आपके जैसे ही नाव में था, क्योंकि यह कैसे किया गया था, इस पर कोई नमूना नहीं था, लेकिन एमएसडीएन दस्तावेज को समझने और जांचने के बाद विंडोज 8 स्टोर ऐप पर एक स्वाइप इशारा कैसे लागू किया गया है # , यह वही है जो मैं आया था (और यह मेरे ऐप के लिए काम करता है जिसके लिए ऊपर/नीचे/बाएं/दाएं स्वाइप करने की आवश्यकता होती है):

सबसे पहले, जेस्चर रिकॉग्नाइज़र के बजाय, मैनिपुलेशन घटनाओं का उपयोग करने की आवश्यकता है, इसलिए ग्रिड जिसे आप स्वाइप करना चाहते हैं (चलिए कहते हैं कि आप इसे पूरी स्क्रीन लेते हैं ताकि यह इशारा करता है) निम्नलिखित:

मैंने अपना ग्रिड स्वाइपिंग कहा urface और मैं दोनों Y- अक्ष और X- अक्ष के लिए जोड़-तोड़ मोड से निपटने हूँ:

swipingSurface.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY; 

फिर जोड़-तोड़ देता है जिन्हें आप सूचना प्राप्त करना चाहते ऊपर तार, मेरे मामले में मैं सिर्फ तब जानना चाहता हूँ जोड़-तोड़ शुरू कर दिया और जब यह समाप्त हो गया: जो आप अपने हेरफेर पर चाहते

swipingSurface.ManipulationStarted += OnManipulationStarted; 
swipingSurface.ManipulationCompleted += OnManipulationCompleted; 

क्या इस तरह के प्रारंभिक बिंदु हो रही अगर आप चाहते हैं के रूप में शुरू किया था,। लेकिन वास्तविक चाल इस प्रकार, ManipulationCompleted घटना है, जिसमें आप वेग अपने हाव-भाव से उत्पन्न प्राप्त करने की आवश्यकता है:

public void OnManipulationCompleted(object sender, ManipulationCompletedEventArgs e) { 
    var velocities = e.Velocities;  
} 

ManipulationCompletedEventArgs वेग संपत्ति प्रकार ManipulationVelocities की एक struct वापस लाना होगा, जिसमें अन्य गुण शामिल हैं:

- कोणीय: डिग्री प्रति मिलीसेकंड में घूर्णन वेग।

- विस्तार: डीआईपी प्रति मिलीसेकंड में विस्तार, या स्केलिंग, वेग।

- रैखिक: डीआईपी प्रति मिलीसेकंड में सीधी रेखा वेग।

मैं वास्तव में रैखिक वेग है, जो एक प्वाइंट कि जिस दिशा में इशारा किया गया था यह दर्शाता है एक्स और वाई मान शामिल है पर देख रहा हूँ; उदाहरण के लिए, अगर ऊपर की ओर स्वाइप था, तो आप देखेंगे कि Y मान सकारात्मक है, और अगर इसके नीचे Y मान ऋणात्मक है; एक ही एक्स मूल्य के लिए चला जाता है, अगर कड़ी चोट छोड़ दिया है, एक्स मान नकारात्मक हैं और अगर कड़ी चोट सही है, एक्स मूल्यों ताकि आप उन मूल्यों के साथ चारों ओर खेलने के लिए और अपनी स्वाइप दिशा, अंतिम अंक, आदि की जांच कर सकते, सकारात्मक रहे हैं ।

आशा इस मदद करता है।

+0

खैर, स्वाइप भाग आपके लिए हल हो गया है। लेकिन अब मुझे एक समस्या हल करने की जरूरत है (अगर आप इसे हल भी करते हैं)। कड़ी चोट एक रिक्त स्थान में काम नहीं करता (कल्पना करें कि आप एक ग्रिड है, खाली कोशिकाओं के साथ ... भले ही आप ग्रिड में या माता-पिता में उन घटनाओं को पकड़ने आप उन कोशिकाओं पर स्वाइप नहीं कर सकता) –

+0

@Tiago अल्मीडा क्या आप ग्रिड खाली होने पर सभी घटनाएं प्राप्त कर रहे हैं? –

+2

@ राजमोहन कैथिरसन आखिरकार मैंने इसे हल कर लिया है। ऐसा लगता है कि आप एक पृष्ठभूमि है ताकि आप घटनाओं प्राप्त कर सकते हैं की जरूरत है। भले ही वह पृष्ठभूमि पारदर्शी पर सेट हो। –

1

में एक ही पोस्ट किया है आप अपनी कड़ी चोट करने योग्य नियंत्रण पर ManipulationMode स्थापित करने और हेरफेर ~ घटनाओं से निपटने की कोशिश कर सकते। ध्यान दें कि कुछ नियंत्रण यूआई घटनाओं के उत्साह से भरा हुआ बंद हो सकता है, इसलिए यदि आप एक बटन या एक ScrollViewer के अंदर अपने नियंत्रण डाल कहना - घटनाओं काम न करे।

+1

धन्यवाद, मैं इसके साथ प्रयास करूंगा, क्या आप कृपया मुझे ग्रिड के लिए इशारा सौंपने के लिए मार्गदर्शन कर सकते हैं। 'geustureRecorgizer = नया जेस्चर रिकॉग्नाइज़र(); geustureRecorgizer.CrossSlideHorizontally = true; geustureRecorgizer.GestureSettings = GestureSettings.CrossSlide; geustureRecorgizer.CrossSliding + = नए TypedEventHandler (Guesture_Sliding); ' ग्रिड –

+0

क्षमा करें, मैं उपयोग नहीं किया है GestureRecognizer को यह इशारा आवंटित करने के लिए कैसे अभी तक। –

1

आप बाहर SwipeHintThemeAnimationGestureRecognizer का उपयोग करता है एक आयत नियंत्रण करने के लिए हुक या अपने ग्रिड नियंत्रण का उपयोग करने के लिए इसे संशोधित करने के लिए जांच कर सकता है, the documentation देखते हैं।

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