2008-11-10 17 views
7

एक ही कस्टम ईवेंट को बढ़ाने के लिए आपको दो असंबंधित नियंत्रण कैसे प्राप्त होते हैं? मेरे द्वारा अब तक देखे गए सभी उदाहरणों में एक ही नियंत्रण में परिभाषित एक घटना है, क्या मुझे एक अलग दृष्टिकोण लेना चाहिए?WPF कस्टम रूटेड ईवेंट प्रश्न

उदा। मैं एक बटन और एक टेक्स्टबॉक्स के लिए ऑनफोकस हैंडलर से एक कस्टम बबलिंग ईवेंट उठाना चाहता हूं।

उत्तर

8

सबसे पहले मुझे यह बताएं कि आपका प्रश्न यह स्पष्ट नहीं करता है कि आप मौजूदा UIElement.GotFocusEvent का उपयोग नहीं करना चाहते हैं, लेकिन मुझे लगता है कि आप इसके बारे में जानते हैं और इसका उपयोग करने के आपके कारण नहीं हैं।

आप हमेशा एक स्थिर वर्ग पर एक कस्टम घटना पंजीकृत कर सकते हैं, और जहां चाहें इसे उठा सकते हैं। Keyboard class इसकी सभी घटनाओं के साथ करता है (उदा। Keyboard.KeyDownEvent)।

public static class RoutedEventUtility 
{ 
    public static readonly RoutedEvent MyCustomEvent = EventManager.RegisterRoutedEvent("MyCustomEvent", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(RoutedEventUtility)); 
} 

आप ईवेंट उत्पन्न हैं, जैसे आप किसी अन्य RoutedEvent होगा।

RoutedEventArgs args = new RoutedEventArgs(RoutedEventUtility.MyCustomEvent); 
RaiseEvent(args); 

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

public class MyCustomControl : Control 
{ 
    public static readonly RoutedEvent MyCustomEvent = RoutedEventUtility.MyCustomEvent.AddOwner(typeof(MyCustomControl)); 
} 
+0

धन्यवाद। क्षमा करें, हाँ UIElement.GotFocusEvent के बारे में सही धारणा। – MJS

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