आप एक वर्ग का उत्पादन करने में सक्षम नहीं होंगे जो उसी तरह काम करता है क्योंकि सिल्वरलाइट Shape
बेस क्लास से प्राप्त कस्टम तत्वों के निर्माण का समर्थन नहीं करता है।
सिल्वरलाइट में कस्टम आकार बनाने के कारण असंभव है कि सिल्वरलाइट WPF की "दृश्य परत" साझा नहीं करता है। अगर आप पूरी तरह से समझना चाहते हैं कि आप जो कोशिश कर रहे हैं वह असंभव है, तो आपको यह समझने की जरूरत है कि यहां डब्लूपीएफ से सिल्वरलाइट कितना अलग है। (और यदि आपको परवाह नहीं है, तो अगले 2 अनुच्छेदों को छोड़ दें।)
WPF में, आप दो पूरी तरह से अलग-अलग स्तरों पर काम कर सकते हैं: दृश्य परत, या ढांचे परत। विजुअल लेयर की सेवाएं WindowsBase.dll और PresentationCore.dll द्वारा प्रदान की जाती हैं। यह मूल प्रतिपादन और इनपुट सेवाएं प्रदान करता है। लेकिन अगर आप स्टाइलिंग, डेटा बाध्यकारी, लेआउट, टेम्पलेटिंग जैसी चीजें चाहते हैं, तो आपको ढांचे की सेवाओं की आवश्यकता है, और ये प्रेजेंटेशनफ्रेमवर्क.dll द्वारा प्रदान की जाती हैं। आकार के प्रकार - Rectangle
, Path
, और इसी तरह - सभी ढांचे के प्रकार हैं - वे FrameworkElement
से प्राप्त होते हैं और वे डेटा बाध्यकारी, लेआउट, एनीमेशन आदि का समर्थन करते हैं। लेकिन वे दृश्य परत के शीर्ष पर लागू होते हैं - यदि आप प्रतिबिंबक या आईएलडीएएसएम में Shape
प्रकारों में से किसी एक को देखते हैं तो आप देखेंगे कि वे सभी OnRender
विधि को ओवरराइड करते हैं, और यही वह जगह है जहां वास्तविक आकार परिभाषित कोड रहता है। (OnRender
एक दृश्य परत फ़ंक्शन है।) और क्योंकि दृश्य परत पूरी तरह से समर्थित और प्रलेखित एपीआई है, इसलिए आप WPF में अपने स्वयं के आकार लिखने के लिए स्वतंत्र हैं - आप बिल्कुल वही कोड लिख सकते हैं जैसा आपको मिलेगा अंतर्निहित आकार कक्षाएं।
सिल्वरलाइट इस दृश्य/फ्रेमवर्क भेद को नहीं बनाता है - सिल्वरलाइट में, डब्ल्यूपीएफ की दृश्य परत अनिवार्य रूप से फ्रेमवर्क परत में गिर गई है।तो यदि आप रिफ्लेक्टर या आईएलडीएएसएम में आकृति प्रकार देखते हैं, तो आप देखेंगे कि उनमें OnRender
विधि नहीं है, और वे लगभग खाली हैं। ऐसा इसलिए है क्योंकि सिल्वरलाइट में, आकार सभी अंतर्निहित हैं - प्लगइन Ellipse
, Path
, और अन्य सभी आकारों के लिए विशेष हैंडलिंग में अंतर्निहित है। तो सिल्वरिलघट में विस्तार के लिए आकृतियों का सेट खुला नहीं है। सिल्वरलाइट में ओवरराइड करने के लिए OnRender
विधि नहीं है। तो आप सिल्वरलाइट में Shape
से प्राप्त अपनी खुद की कस्टम क्लास नहीं लिख सकते हैं।
तो, या तो कस्टम Control
या UserControl
जाने का रास्ता होगा, मुझे डर है। हालांकि MouseEnter
और MouseLeave
को काम करने से रोकना नहीं चाहिए। क्या आपने वास्तव में पाया है कि वे काम नहीं करते हैं? या आप बस यह मान रहे हैं कि वे काम नहीं करेंगे?
स्रोत
2010-12-14 11:35:38
यदि आप मूल कक्षा पोस्ट करते हैं तो आपको अधिक प्रतिक्रिया मिल सकती है। फिर अन्य लोग इसे आपके लिए तुरंत लिख सकते हैं। शुभ लाभ। –
यह Silverlight मंचों पर एक अनसुलझा समस्या है http://forums.silverlight.net/forums/p/39904/113634.aspx और यहां तक कि Silverlight 4 में subclassing आकार का समाधान (http://blogs.msdn.com/b /nickkramer/archive/2009/12/03/subclassing-shape-or-more-accurately-path.aspx) DefiningGeometry संपत्ति समस्या के साथ मदद नहीं करता है। हमें इसके समाधान पर एक बक्षीस शुरू करना चाहिए। – Alain