2011-08-29 8 views
12

इस और WPF घटना में स्रोत से निपटने में क्या अंतर है बनाम?RoutedEventArgs.Source भेजने वाले

उदाहरण के लिए, मैं एक कैनवास में एक अंडाकार था, और अंडाकार पर क्लिक किया: अंडाकार दोनों इस और स्रोत होगा।

लेकिन अगर अंडाकार घटना लेकिन मुख्य विंडो है, घटना कैनवास से होकर गुजरेगी संभाल नहीं करता है ... तो कैनवास इस मुख्य विंडो पर घटना के लेकिन स्रोत होगा अंडाकार होगा।

क्या मेरे पास यह अधिकार है?

उत्तर

6

बुलबुले!

प्रेषक यह ऑब्जेक्ट है कि ईवेंट उठाया जा रहा है, जबकि स्रोत मूल तत्व था जो घटना को उठाया जा रहा था।

इस मामले में जैसा

:

<TabControl Name="tc1" SelectionChanged="tc1_SelectionChanged"> 
    <TabItem Header="1"> 
     <TabControl Name="tc2"> 
      <TabItem Header="1" /> 
      <TabItem Header="2" /> 
     </TabControl> 
    </TabItem> 
    <TabItem Header="2" /> 
</TabControl> 
private void tc1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
} 

इस मामले में, अगर आप उप TabControl पर SelectedItem बदलने के लिए, sender बराबर होगा tc1, Sourcetc2 के बराबर होगा।

15

दोनों के बीच का अंतर अक्सर नहीं देखा जाता है, आमतौर पर sender और Source समान हैं। विंडोज फॉर्म की तरह लिखे गए अधिकांश कोड मूल रूप से अंतर को अनदेखा करेंगे और उन्हें उसी संदर्भ के साथ भेज देंगे। हालांकि, यह देखते हुए कि डब्ल्यूपीएफ की घटना मार्ग कैसे काम करता है, वे दो अलग-अलग अवधारणाओं का प्रतिनिधित्व करते हैं।

sender is the object at which the event handler was attached। यह वह मालिक है जिसने ईवेंट को रूट करना शुरू करने के लिए हैंडलर उठाया है। एमएसडीएन से:

प्रेषक और स्रोत के बीच एक अंतर एक तत्व पेड़ के माध्यम से घुमावदार घटना के ट्रैवर्सल के दौरान विभिन्न तत्वों के लिए मार्गांतरित होने का परिणाम है।

MSDN: Event routing diagram

Source is the object where the event originates. सुरंग और उत्साह से भरा हुआ के मामले में, Source अपने बच्चे तत्वों में से एक हो जाएगा। आप किसी भी घटना वृक्ष encapsulation वापस छीलने के लिए OriginalSource संपत्ति का उपयोग कर सकते हैं।

2

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

  • RoutedEventArgs.OriginalSource - मूल उद्देश्य यह है कि पहली घटना
  • RoutedEventArgs.Source उठाया - उद्देश्य यह है कि घटना को उठाया। यह आमतौर पर मूल स्रोत के समान होता है लेकिन समग्र नियंत्रण से निपटने पर यह मूल हो सकता है जिसमें मूल स्रोत ऑब्जेक्ट होता है।*
  • भेजने वाले - वर्तमान तत्व यह है कि घटना

* आम मामलों में जहां स्रोत समायोजित किया जा सकता एक नियंत्रण के लिए एक सामग्री मॉडल के अंदर सामग्री तत्वों (किसी सूची आइटम की सामग्री शामिल से निपटने है, उदाहरण के लिए, सूची आइटम तत्व को स्रोत के रूप में रिपोर्ट करेगा और सूची आइटम के भीतर वास्तविक तत्व मूल स्रोत होगा)।

संदर्भ: वर्तमान तत्व यह है कि घटना

OriginalSource से निपटने है: मूल वस्तु

4

भेजने वाले (भेजने वाले का उल्लेख भी शामिल है) वह पहला राय घटना

स्रोत: वस्तु जो उठाई गई घटना। यह आमतौर पर मूल नियंत्रण के समान होता है लेकिन जब यह मूल नियंत्रण वस्तु होता है तो यह मूल हो सकता है। *

रूटेडएवेंट: आपके ईवेंट हैंडलर (जैसे स्थैतिक UIElement) द्वारा ट्रिगर किए गए ईवेंट के लिए रूटेडएवेंट ऑब्जेक्ट प्रदान करता है। MouseUpEvent ऑब्जेक्ट)। यह जानकारी उपयोगी है यदि आप एक ही ईवेंट हैंडलर के साथ अलग-अलग ईवेंट प्रबंधित कर रहे हैं।

हैंडल: आपको ईवेंट बबलिंग या सुरंग प्रक्रिया को रोकने की अनुमति देता है। जब एक नियंत्रण संभाल संपत्ति को सत्य पर सेट करता है, तो घटना किसी और यात्रा नहीं करती है और किसी अन्य तत्व के लिए नहीं उठाई जाती है।

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