2010-07-23 22 views
8

क्या कोई जानता है कि मैं एक नियंत्रण टेम्पलेट पर कोई ईवेंट क्यों सेट नहीं कर सकता ??डब्ल्यूपीएफ - एक नियंत्रण टेम्पलेट पर घटनाक्रम?

उदाहरण के लिए, कोड की निम्न पंक्ति संकलित नहीं होगी। यह नियंत्रण टेम्पलेट में किसी भी घटना के साथ करता है।

<ControlTemplate x:Key="DefaultTemplate" TargetType="ContentControl"> 
    <StackPanel Loaded="StackPanel_Loaded"> 

    </StackPanel> 
</ControlTemplate> 

मैं एक MVVM डिजाइन पैटर्न और नियंत्रण यहाँ एक ResourceDictionary है कि आवेदन के MergedDictionaries में जोड़ा जाता है में स्थित है का उपयोग कर रहा हूँ।

+0

एक ही प्रश्न वाले किसी भी व्यक्ति के लिए, मैं एक विकल्प के रूप में स्टाइल और इवेंटसेटर का उपयोग कर रहा हूं, हालांकि मैं अभी भी जानना चाहता हूं कि मैं क्यों नहीं कर सकता यदि मैं ControlTemplate का उपयोग कर रहा हूं तो ईवेंट को सीधे नियंत्रण पर सेट करें। – Rachel

उत्तर

11

क्या किसी को पता है कि मैं एक नियंत्रण टेम्पलेट पर कोई ईवेंट क्यों सेट नहीं कर सकता ??

दरअसल, आप कर सकते हैं ... लेकिन आप ईवेंट हैंडलर को कहां परिभाषित करने की अपेक्षा करेंगे? ResourceDictionary में कोई कोड-पीछे नहीं है, इसलिए ईवेंट हैंडलर कोड डालने के लिए कोई जगह नहीं है। हालांकि, आप अपने संसाधन शब्दकोश के लिए एक वर्ग बना सकते हैं और x:Class विशेषता के साथ संबद्ध:

<ResourceDictionary x:Class="MyNamespace.MyClass" 
        xmlns=...> 

    <ControlTemplate x:Key="DefaultTemplate" TargetType="ContentControl"> 
     <StackPanel Loaded="StackPanel_Loaded"> 

     </StackPanel> 
    </ControlTemplate> 

सी # कोड:

namespace MyNamespace 
{ 
    public partial class MyClass : ResourceDictionary 
    { 
     void StackPanel_Loaded(object sender, RoutedEventArgs e) 
     { 
      ... 
     } 
    } 
} 

(आप भी के निर्माण कार्रवाई बदलनी होगी संसाधन पृष्ठ "पृष्ठ" में, मुझे बिल्कुल याद नहीं है ...)

+0

यही वह है जो मेरे पास वर्तमान में है ... संसाधन के लिए एक वर्ग जो इसके बिल्ड एक्शन पृष्ठ पर सेट है। केवल अंतर मैं देख सकता हूं कि मैंने इसे सार्वजनिक घोषित नहीं किया है, लेकिन इसे बदलने से बिल्कुल मदद नहीं मिली है। – Rachel

+0

और वास्तव में समस्या क्या है? क्या आपको एक त्रुटि संदेश मिलता है ? –

+0

जब मैं प्रोग्राम चलाने के लिए जाता हूं, तो यह एक NullReferenceException फेंकता है (यह ठीक संकलित करता है)। इसमें मेरे डिजाइन पैटर्न के साथ कुछ करना होगा क्योंकि मैंने एक साधारण परीक्षण केस और इसके कामकाजी जुर्माना बनाने की कोशिश की थी। मेरा मुख्य ऐप विभिन्न संसाधनों के समूह को लोड करने के लिए app.xaml के ऑनस्टार्टअप को ओवरराइट करता है, मेनविंडो का एक उदाहरण बनाता है, इसके डेटा कॉन्टेक्स्ट को सेट करता है, फिर मेनविंडो.शो() को कॉल करता है - आखिरी पंक्ति वह जगह है जहां मुझे अपवाद मिल रहा है। ईवेंट को कंट्रोल टेम्पलेट से इवेंटसेटेटर में ले जाना त्रुटि से छुटकारा पाता है। – Rachel

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