XAML

5

में कस्टम इवेंट हैंडलर सेट करने के लिए निर्भरता गुण बनाएं I DependencyProperties का उपयोग करके डिफ़ॉल्ट फ्रेमवर्क तत्वों में कस्टम ईवेंट हैंडलर जोड़ना चाहते हैं।XAML

कुछ निम्नलिखित की तरह:

public class MyPage : Page{ 
    public void someHandler(object sender, EventArgs e){ 
     //do something 
    } 
} 

यहाँ कैसे मैं वर्ग कि परिभाषित करता है की कल्पना के किसी न किसी नमूना है:

<Border custom:MyProps.HandleMyEvent="someHandler">...</Border> 

यहाँ नियंत्रण है कि सीमा तत्व शामिल करने के लिए कोड के पीछे है संपत्ति:

public class MyProps{ 
    public event EventHandler MyInternalHandler; 
    public static readonly DependencyProperty HandleMyEventProperty = ... 
    public void SetHandleMyEvent(object sender, EventHandler e){ 
     MyInternalHandler += e; 
    } 
} 

समस्या यह है कि मुझे कोई नहीं पता/नहीं मिला घटनाओं/प्रतिनिधियों और EventHandlers के साथ DependencyProperties को गठबंधन करने का संकेत देता है।

क्या आपके पास कोई सुराग है?

+0

क्या हम इस समाधान के लिए समस्या का संकेत दे सकते हैं? यदि आप डिफ़ॉल्ट रूपरेखा तत्वों में ईवेंट जोड़ने की सोच रहे हैं, तो बस सबक्लास या व्यवहार का उपयोग करें। –

उत्तर

5

मुझे लगता है कि इसका डब्ल्यूपीएफ के साथ कुछ लेना देना नहीं है, यह एक चांदी का सवाल है।

सबसे पहले आप मौजूदा नियंत्रण में Event नहीं जोड़ सकते हैं। आखिरकार आप संलग्न Properties जोड़ रहे हैं जबकि घटनाओं को अलग-अलग संभाला जाता है, वे गुण नहीं हैं।

आपको एक नया प्रकार बनाने की आवश्यकता है जिसमें इस घटना के बाद इस प्रकार की एक संलग्न संपत्ति बनाएं।

यहाँ एक बुनियादी प्रकार है कि बस एक घटना है: -

public class MyEventer 
{ 
    public event EventHandler MyEvent; 

    // What would call this?? 
    protected void OnMyEvent(EventArgs e) 
    { 
     if (MyEvent != null) 
     MyEvent(this, e); 
    } 
} 

अब हम एक संलग्न संपत्ति जो MyEventer अपनी संपत्ति के रूप में है बनाने के लिए, मैं एक अलग स्थिर कक्षा में इन जगह पसंद करते हैं।

public static class MyProps 
{ 

    public static MyEventer GetEventer(DependencyObject obj) 
    { 
    return (MyEventer)obj.GetValue(EventerProperty); 
    } 

    public static void SetEventer(DependencyObject obj, MyEventer value) 
    { 
    obj.SetValue(EventerProperty , value); 
    } 

    public static readonly DependencyProperty EventerProperty = 
     DepencencyProperty.RegisterAttached("Eventer", typeof(MyEventer), typeof(MyProps), null) 

    } 
} 

अब आप इस प्रकार का नियंत्रण करने के लिए इस देते हैं: -

<Border ...> 
    <custom:MyProps.Eventer> 
     <custom:MyEventer MyEvent="someHandler" /> 
    </custom:MyProps.Eventer> 
</Border> 

आप परियोजना संकलन यदि यह XAML लिखने से पहले आप ध्यान दें हूँ कि दृश्य स्टूडियो यह बनाने के लिए आप विकल्प की पेशकश करेगा आपके लिए कोड में ईवेंट हैंडलर।

बेशक यह अभी भी एक महत्वपूर्ण सवाल छोड़ देता है: आप इस घटना को कैसे आग लगाना चाहते थे?

+0

घटना को उस ढांचे द्वारा निकाल दिया गया है जिसे मैं लिख रहा हूं। और जैसा कि आप सही ढंग से प्रदर्शित करते हैं, मुझे उपयोगकर्ता द्वारा परिभाषित हैंडलर को आसानी से ट्रिगर करने के लिए कुछ OnMyEvent-function की आवश्यकता होती है। अब उपयोगकर्ता कस्टम हैंडलर को परिभाषित कर सकता है या XAML में टैब-कुंजी का उपयोग करके एक नया उत्पन्न कर सकता है। बहुत अच्छा, भले ही मैंने अतिरिक्त ..> ..> के बिना प्रत्यक्ष निर्भरता प्रॉपर्टी पसंद किया हो। <सीमा सी: MyProps.MyHandler = "..." /> का उपयोग करने के लिए बहुत अच्छा होगा। वैसे भी, आपके मूल्यवान इनपुट के लिए धन्यवाद! :) – Juve

+0

सुंदर बुरी नामकरण सम्मेलन अनुपालन। –

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