यहां पर विचार करने के तीन मामले हैं: UserControl, ControlTemplate, और कस्टम नियंत्रण। (मुझे लगता है कि डेटा टेम्पलेट को कोई स्पष्टीकरण की आवश्यकता नहीं है)
ए कस्टम नियंत्रण ऐसा कुछ है जो आप एक नए यूआई घटक की मूल कार्यक्षमता बनाते समय प्रदान करते हैं। इसके लिए कई पेशेवर और विपक्ष हैं, लेकिन उदाहरण के लिए, यदि आप किसी आइटम नियंत्रण के कस्टम चयन व्यवहार चाहते हैं, तो आप इसे चयनकर्ता या मल्टीसेलेक्टर (wpftoolkit डेटाग्रिड यह करता है) को उपclass करके कर सकते हैं। साथ ही, यदि आप एक ऐसी वस्तु चाहते हैं जिसमें एक नई निर्भरता प्रॉपर्टी होगी, तो आप ज्यादातर मामलों में नियंत्रण से प्राप्त होंगे।
यहां निहित डब्लूपीएफ सिद्धांत "लापरवाही" नियंत्रण प्रतिमान है, या "किसी को अपने नियंत्रण को कम करने की अपेक्षा करना सुनिश्चित करें, या कम से कम इसे अपने स्वयं के टेम्पलेट परिदृश्य में अच्छी तरह से व्यवहार करें"। कस्टम कंट्रोल आमतौर पर दिमाग में पुन: प्रयोज्यता के साथ बनाए जाते हैं, अक्सर ढांचे के डीएल के हिस्सों के रूप में।
ए नियंत्रण टेम्पलेट अनिवार्य रूप से एक प्रतिस्थापन दृश्य वृक्ष का वर्णन है, और इसे फ्रेमवर्क एलिमेंट्स या स्टाइल के हिस्से के रूप में स्पष्ट रूप से सेट किया जा सकता है। यह वह विकल्प है जहां आपको लक्ष्य रखना चाहिए कि आपका लक्ष्य प्राथमिक रूप से आवेदन करने के लिए है और इसके साथ किया जाना चाहिए। यदि आप बाइंडिंग और ट्रिगर्स (और संभवतः स्टाइल युक्त संभव) प्राप्त करने में सक्षम हैं, तो आप कंट्रोल टेम्पलेट के साथ लगभग कुछ भी कर सकते हैं। यह सब आपके आवेदन को एक आम "थीम" देने के लिए एक संसाधन के रूप में घोषित किया जा सकता है।
ए उपयोगकर्ता नियंत्रण एक स्व-निहित समग्र नियंत्रण है, जिसमें डिज़ाइनर में व्यक्तिगत रूप से संपादन योग्य भागों के साथ, और यदि आपको अपने घटकों को देखने और डिजाइनर में प्रबंधित करने की आवश्यकता है तो इसका सबसे अच्छा उपयोग किया जाता है।एक नियंत्रण टेम्पलेट, दूसरी ओर, डिजाइनर में हेरफेर के लिए अपने घटकों का पर्दाफाश नहीं करेगा (हालांकि यह दिखाई देगा)। आप आम तौर पर एक ग्राहक विवरण पृष्ठ, या एक उत्पाद प्रदर्शन ब्राउज़र, या किसी भी मामले के लिए उपयोगकर्ता नियंत्रण बनाते हैं जहां आप पूर्ण उड़ा नियंत्रण नहीं बनाना चाहते हैं, लेकिन पूर्ण डिजाइनर समर्थन के साथ विस्तृत दृश्य चाहते हैं।
यदि आप MVVM पैटर्न का उपयोग करते हैं तो यहां एक विशेष मामला है। कई महान एमवीवीएम कार्यान्वयन उपयोगकर्ता नियंत्रण को दृश्यों, और नियंत्रण टेम्पलेट्स और स्टाइल के रूप में उन विचारों द्वारा उपयोग किए जाने वाले संसाधनों के रूप में उपयोग करते हैं। एमवीवीएम अभ्यास कस्टम नियंत्रण की आवश्यकता को भी कम करता है, और इसके कई अन्य लाभ भी हैं।
(MVVM बारे में अधिक जानकारी, जैसी कई अन्य के लिए, जोश स्मिथ, साचा नाई और कार्ल Shifflett की शानदार लेख के लिए गूगल)
मैं इसे समझते हैं कि प्राथमिक अंतर यह है कि मुझे लगता है कि नियंत्रण के लिए नई निर्भरता गुण प्रदान कर सकता है। लेकिन मुझे लगता है कि अन्य सभी बदलाव स्टाइल, ट्रिगर्स या टेम्पलेट में सेट किए जा सकते हैं। या? –