2013-05-24 6 views
14

बबलिंग घटनाओं और टनलिंग घटनाओं के बीच सटीक अंतर क्या है? मुझे बबलिंग घटनाओं का उपयोग कहां करना चाहिए और मुझे टनलिंग कार्यक्रमों का उपयोग कहां करना चाहिए? अग्रिम में धन्यवाद!बबलिंग और टनलिंग घटनाओं के बीच अंतर

उत्तर

30

डब्ल्यूपीएफ हमें घटनाओं को संभालने के लिए कई अलग-अलग तंत्र प्रदान करता है - वे बुलबुले, सुरंग और प्रत्यक्ष हैं। ये सभी रूटेड घटनाओं के रूप में जाने जाते हैं।

प्रत्यक्ष घटना

आप शायद पहले से ही प्रत्यक्ष कराई घटना के लिए उपयोग किया जाता है। यह है जहां आइटम स्वयं ही होने वाली घटना को संभालता है। एक अच्छा उदाहरण मानक WinForms में माउस बटन के बाईं ओर onClick को संभालने वाला होगा। यह वह जगह है जहां घटना जीयूआई आइटम में उठाई जाती है और को जीयूआई तत्व द्वारा संभाला जाता है।

bubbling घटना

अब हम सभी किसी न किसी रूप में कुछ बुलबुले की तरह। बबलिंग होती है जब ईवेंट तत्व द्वारा नियंत्रित नहीं किया जाता है (textbox कहें) और ईवेंट "बुलबुले" यूआई कंटेनर को अपना रास्ता बनाते हैं। उदाहरण के लिए, मान लें कि आपके पास एक विंडो है जिसमें एक पैनल है और के अंदर पैनल है जिसमें आपके पास ग्रिड है और ग्रिड के अंदर आपके पास टेक्स्टबॉक्स है। यदि ईवेंट को टेक्स्टबॉक्स द्वारा नियंत्रित नहीं किया जाता है, तो यह आगे बढ़ता है, गुजरता है या ग्रिड स्तर तक "बुलबुले" (जैसे ग्रिड में टेक्स्टबॉक्स होता है), यह उस स्तर पर संभाला नहीं जाता है तो ईवेंट बुलबुले आगे पैनल में "पेड़" (दृश्य वृक्ष के रूप में जाना जाता है) को प्रबंधित किया जा सकता है या नहीं। यह प्रक्रिया तब तक जारी रहती है जब तक इसे संभाला नहीं जाता है या घटना शीर्ष तत्व से "बच निकलती है"।

एक बबलिंग घटना के उदाहरण MouseButtonDown ईवेंट की तरह कुछ होंगे। या Keydown घटना।

टनेलिंग

टनेलिंग बुदबुदाती के विपरीत है। तो विज़ुअल ट्री "अप" पर जाने वाली घटना के बजाय, ईवेंट की ओर दृश्य पेड़ को स्रोत मानता है। मानक डब्ल्यूपीएफ नामकरण एक सुरंग घटना की परिभाषा यह है कि वे सभी "पूर्वावलोकन" के साथ शुरू होते हैं उदाहरण के लिए previewdownkey और previewmousebuttondown। आप उन्हें "लक्ष्य" तत्व के रास्ते पर पकड़ सकते हैं और इसे संभाल सकते हैं। इसके लिए उदाहरण शायद आपके पास ग्रिड नियंत्रण के अंदर कुछ नियंत्रण हो सकते हैं और किसी कारण से आपने निर्णय लिया है कि के भीतर कोई नियंत्रण नहीं है कि ग्रिड को "टी" पहुंचने की अनुमति दी जाएगी।

लेखक जो मैं समर्थन नहीं करते और न ही से सहमत की राय के साथ Source

And another StackOverflow question which is pretty much the same.

A nice demo project

And last but not least some explanation and another tutorial.

+1

सच अच्छा विवरण, धन्यवाद +1। बीटीडब्ल्यू, "एक अच्छा डेमो प्रोजेक्ट" का लिंक अब मर चुका है। – Sabuncu

2

एक शुरुआत के रूप में: कुछ डिफ़ॉल्ट की घटनाओं के लिए WPF में नामकरण परंपरा और सुरंग के लिए Preview<event> उत्साह से भरा हुआ के लिए <event> है। तो उदाहरण के लिए KeyDown के लिए हमारे पास PreviewKeyDown और KeyDown, क्रमशः सुरंग और बुलबुले होगा।

नामकरण सम्मेलन का अर्थ है, दोनों के बीच का अंतर यह है कि एक सुरंग घटना पेड़ (शायद खिड़की) में उच्चतम नोड पर शुरू होगी और सबसे कम बच्चे के पास जायेगी। एक बुलबुला घटना बच्चे से शुरू होगी और फिर ऊपर की तरफ जायेगी।

इस गाइड यह स्पष्ट रूप से व्याख्या करनी चाहिए: http://www.codeproject.com/Articles/464926/To-bubble-or-tunnel-basic-WPF-events

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