2010-01-27 10 views
11

1. quesion का हिस्सा: इन 2 ईवेंट पंजीकरणों के बीच क्या अंतर है? सवाल काUIElement.AddHandler() बनाम Event + = परिभाषा

_popUp.AddHandler(PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(PopUp_PreviewMouseLeftButtonDown)); 

_popUp.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(_popUp_PreviewMouseLeftButtonDown); 

2.nd हिस्सा: या

popUp.Opened += PopUp_Opened; 

उत्तर

10

Redgate's Reflector के अनुसार अंततः बनाम, वहाँ कोई अंतर नहीं है। अंततः दोनों विधियों ने आंतरिक विधि EventHandlerStore.AddRoutedEventHandler पर कॉल किया।

public void add_PreviewMouseLeftButtonDown(MouseButtonEventHandler value) 
{ 
    this.AddHandler(PreviewMouseLeftButtonDownEvent, value, false); 
} 

आप यह आप के लिए UIElement.AddHandler कॉल देख सकते हैं: यह परावर्तक PreviewMouseLeftButtonDown घटना के लिए add एक्सेसर के उत्पादन में (वर्ग UIElement में) है।

आपके प्रश्न को संपादित करने से पहले आप पॉपअप की Opened घटना के बारे में पूछ रहे थे। उस स्थिति में, एक अंतर है: सबसे पहले, Opened ईवेंट एक रूटेड घटना के रूप में लागू नहीं किया गया है लेकिन एक साधारण घटना के रूप में, इसलिए आप AddHandler पर भी कॉल का उपयोग नहीं कर सकते हैं। दूसरा, परावर्तक दिखाता है कि EventHandlerStore में एक अलग विधि कहा जाता है जो हैंडलर को एक साधारण प्रतिनिधि संग्रह में जोड़ता है।

5

महत्वपूर्ण बात AddHandler(xxx,xxx, false) हो सकती है।

यदि आप true का उपयोग करते हैं तो आप उन घटनाओं को पकड़ सकते हैं जो पहले से ही संभाले जा चुके हैं, जो उपयोगी हो सकते हैं यदि आप टेक्स्टबॉक्स जैसे नियंत्रण को उपclass करते हैं।

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