2009-08-17 20 views
5

बनाएं मैं एक घटना है कि अपने कस्टम नियंत्रण से मेरे अन्य नियंत्रण में से एक के एक क्लिक घटना संभाला कैसे बनाऊं? एक पाठ बॉक्स और एक बटन (कस्टम नियंत्रण) एक Silverlight आवेदन (का उपयोग करता है कस्टम नियंत्रण ऊपर)सिल्वरलाइट कस्टम नियंत्रण कस्टम इवेंट

मैं क्लिक करें घटना का पर्दाफाश करने के लिए चाहते हैं:

यहाँ मैं क्या मिल गया है की स्थापना है मुख्य आवेदन पर कस्टम नियंत्रण से बटन, मैं यह कैसे कर सकता हूं?

धन्यवाद

+0

क्या आपका कस्टम नियंत्रण उपयोगकर्ता नियंत्रण (UserControl से प्राप्त होता है), या एक सही नियंत्रण है? आप फ़ाइल के पीछे कोड में एक सार्वजनिक घटना का पर्दाफाश करने में सक्षम होना चाहिए, और घटना की सतह के लिए अपने बच्चे के नियंत्रण 'घटनाओं से जुड़ा होना चाहिए। –

+0

वे 2 सच्चे नियंत्रण 1 में संयुक्त हैं, और मैं बस बटन की क्लिक घटना का खुलासा करना चाहता हूं। जब मैं उपयोगकर्ता नियंत्रण पर काम कर रहा हूं, तो मैं क्लिक ईवेंट पर जा सकता हूं, लेकिन अगर मैं उपयोगकर्ता नियंत्रण का उपभोग करने वाले किसी चीज़ पर काम कर रहा हूं, तो मैं उस ईवेंट हैंडलर पर नहीं पहुंचूंगा। – PlayKid

उत्तर

8

यहाँ, एक सुपर सरल संस्करण है के बाद से मैं निर्भरता गुण या कुछ भी उपयोग नहीं कर रहा हूँ। यह क्लिक संपत्ति का पर्दाफाश करेगा। यह मानता है कि बटन टेम्पलेट भाग का नाम "बटन" है।

using System.Windows; 
using System.Windows.Controls; 

namespace SilverlightClassLibrary1 
{ 
    [TemplatePart(Name = ButtonName , Type = typeof(Button))] 
    public class TemplatedControl1 : Control 
    { 
     private const string ButtonName = "Button"; 

     public TemplatedControl1() 
     { 
      DefaultStyleKey = typeof(TemplatedControl1); 
     } 

     private Button _button; 

     public event RoutedEventHandler Click; 

     public override void OnApplyTemplate() 
     { 
      base.OnApplyTemplate(); 

      // Detach during re-templating 
      if (_button != null) 
      { 
       _button.Click -= OnButtonTemplatePartClick; 
      } 

      _button = GetTemplateChild(ButtonName) as Button; 

      // Attach to the Click event 
      if (_button != null) 
      { 
       _button.Click += OnButtonTemplatePartClick; 
      } 
     } 

     private void OnButtonTemplatePartClick(object sender, RoutedEventArgs e) 
     { 
      RoutedEventHandler handler = Click; 
      if (handler != null) 
      { 
       // Consider: do you want to actually bubble up the original 
       // Button template part as the "sender", or do you want to send 
       // a reference to yourself (probably more appropriate for a 
       // control) 
       handler(this, e); 
      } 
     } 
    } 
} 
संबंधित मुद्दे