उपयोगकर्ता नियंत्रण लाइब्रेरी और कस्टम नियंत्रण लाइब्रेरी के बीच क्या अंतर है?


168

मैं अभी WPF पर गति करने के लिए आ रहा हूं और एक पुन: प्रयोज्य WPF नियंत्रण बनाना चाहूंगा।

जब मैं विज़ुअल स्टूडियो में प्रोजेक्ट बनाने के विकल्पों पर नज़र डालता हूं, तो मैं "WPF उपयोगकर्ता नियंत्रण पुस्तकालय" और "WPF कस्टम कंट्रोल लाइब्रेरी" देखता हूं। यह मेरे लिए स्पष्ट नहीं है कि उनके और मेरी Google खोजों में क्या अंतर है, किसी भी सभ्य स्पष्टीकरण को नहीं बदला है।

मैं उनके बीच के अंतरों को समझना चाहता हूं और आदर्श रूप से कुछ उदाहरणों को देखता हूं कि कब एक का उपयोग करना चाहिए।


2
घोंसले के शिकार सामग्री या विकल्प के रूप में एक नियंत्रण के टेम्पलेट को मत भूलना। आप एक कस्टम नियंत्रण लिखने के बिना इस तरह एक नियंत्रण के लिए बहुत नाटकीय परिवर्तन कर सकते हैं।
माइकल

सिर्फ माइक्रा ने क्या कहा। WPF का सबसे अच्छा हिस्सा यह है कि मौजूदा नियंत्रणों को गति देने से भारी प्रभाव पड़ सकता है। आपको कस्टम नियंत्रण की आवश्यकता शायद ही कभी होनी चाहिए। यह WinForms के विपरीत है जहाँ नियंत्रण में मामूली बदलाव के लिए भी नए व्युत्पन्न नियंत्रण की आवश्यकता होती है।
मिकको रैनतैन

फिर भी उपयोगी है। एक और सोने का बिल्ला है।
१०:०४

जवाबों:


117

अभ्यास में कस्टम नियंत्रण कुछ ऐसे हैं जो आप कोड स्तर पर लागू करते हैं, जबकि आप उपयोगकर्ता नियंत्रण के लिए XAML का उपयोग कर सकते हैं। कस्टम नियंत्रण WPF नियंत्रण बेस कक्षाओं में से एक का विस्तार करते हैं और कोड के माध्यम से अतिरिक्त कार्यक्षमता प्रदान करते हैं इसलिए सभी जोड़े गए तर्क और प्रतिनिधित्व को कोड के अंदर लागू किया जाना चाहिए।

एक उपयोगकर्ता नियंत्रण तकनीकी रूप से एक सामान्य सामग्री नियंत्रण है जिसे आप कोड में कुछ हिस्सों में बढ़ा सकते हैं लेकिन आमतौर पर इसे अन्य नियंत्रणों के अंदर रखकर बढ़ाया जाता है। इसलिए जैसा कि केंट ने बताया कि UserControl अन्य नियंत्रणों का एकत्रीकरण है। यह सीमित करता है कि आप उपयोगकर्ता नियंत्रण के साथ क्या कर सकते हैं। इसका उपयोग करना आसान है लेकिन पूर्ण कस्टम नियंत्रण से अधिक सीमित है।

ये नियंत्रण रनटाइम दृष्टिकोण से एक छोटा अंतर है। एप्लिकेशन बनाते समय और उसमें एक UserControl रखने पर, नियंत्रण पेड़ के अंदर एक ठोस UserControl टेम्पलेट होगा। तो अगर हम एक विशेष बटन के एक लंगड़ा उदाहरण पर विचार करें। यदि आप एक उपयोगकर्ता नियंत्रण का उपयोग कर रहे थे तो आप <UserControl>तत्व के अंदर एक बटन जोड़ देंगे । कस्टम नियंत्रण का उपयोग करते समय आप एक बटन से सबसे अधिक संभावना वाले नियंत्रण को प्राप्त करेंगे। तार्किक पेड़ में अंतर दिखाई देगा।

जबकि कस्टम नियंत्रण के समान एक तार्किक पेड़ प्रदान करेगा

  • खिड़की
    • CustomButton

UserControl एक तार्किक पेड़ देगा

  • खिड़की
    • CustomButtonUserControl
      • बटन

तो अंत में UserControl सिर्फ एक सामान्य ContentControl है जिसे आप थोड़ा बढ़ा सकते हैं और जिसके लिए आप सामग्री को पूर्वनिर्धारित कर सकते हैं। कस्टम नियंत्रण कार्यान्वयन में आसानी की कीमत पर अधिक लचीलापन प्रदान करता है क्योंकि आपको XAML का लाभ होने के बजाय कोड में सभी तर्क और इंटरैक्शन करने होंगे।

हालांकि इस सब के बाद, मुझे नहीं लगता कि विज़ुअल स्टूडियो टेम्पलेट्स में इतना अंतर है। सबसे अधिक संभावना है कि विज़ुअल स्टूडियो कस्टम कंट्रोल सिर्फ एक खाली कस्टम नियंत्रण के साथ एक परियोजना बनाता है जबकि उपयोगकर्ता नियंत्रण परियोजना एक खाली उपयोगकर्ता नियंत्रण वाली परियोजना है। आप बाद में परियोजना में किसी भी प्रकार की वस्तुओं को जोड़ सकते हैं।

अपडेट करें

और कस्टम नियंत्रण और उपयोगकर्ता नियंत्रण का उपयोग करने के बारे में मेरी राय यह है कि यदि आप उपयोगकर्ता नियंत्रण के साथ कुछ कर सकते हैं और तार्किक पेड़ में अतिरिक्त नियंत्रण तत्व आपको परेशान नहीं करते हैं, तो उपयोगकर्ता नियंत्रण का उपयोग करें क्योंकि वे बहुत आसान हैं बनाएँ और बनाए रखें। कस्टम नियंत्रण का उपयोग केवल तभी करें जब आपके पास उपयोगकर्ता नियंत्रण का उपयोग न करने का कोई कारण हो।


2
क्या अन्य नियंत्रणों को संयोजित करने के लिए एक कस्टम नियंत्रण का उपयोग किया जा सकता है?
१ of २६

और क्या skinnable / templatable मुद्दे के बारे में?
१ of २६

1
निश्चित नहीं है कि आप का क्या मतलब है। आप अन्य नियंत्रणों को एकत्रित करके एक कस्टम नियंत्रण नहीं बना सकते हैं। आप हालांकि एक पैनल नियंत्रण जैसे स्टैकपैनल, ग्रिड या पैनल से प्राप्त कर सकते हैं ताकि आप एक कस्टम नियंत्रण के साथ एक लेआउट कंटेनर को लागू कर सकें (यह सुनिश्चित नहीं है कि आप उपयोगकर्ता नियंत्रण के साथ ऐसा कर सकते हैं)।
मिकको रैनतैन

हां, लेकिन अगर आप सिर्फ अन्य नियंत्रणों को एकत्रित करना चाहते हैं, तो उपयोगकर्ता नियंत्रण के साथ ऐसा करना बहुत आसान होगा। आप जो करना चाहते हैं, उसके आधार पर एक कस्टम नियंत्रण लिखना वास्तव में कठिन हो सकता है, यही वजह है कि आप एक उपयोगकर्ता नियंत्रण का उपयोग करना पसंद करेंगे भले ही यह केवल क्षमताओं का सबसेट प्रदान करता है।
माइकल

1
इन दोनों नियंत्रणों को सही तरीके से लागू करने पर स्किनटेबल / टेम्पलेबल होना चाहिए। दुर्भाग्य से मेरा WPF संदर्भ इस समय कार्यालय में है इसलिए मैं कार्यान्वयन विवरण की जांच नहीं कर सकता।
मिक्को रेंटेनन

23

A Controlकुछ व्यवहार का प्रतिनिधित्व करता है जो कि स्किनेबल (अस्थायी) है, जबकि UserControlआम तौर पर उच्चतर स्तर का एकत्रीकरण होता है Controlजो किसी एप्लिकेशन के लिए विशिष्ट होता है।

अधिक जानकारी यहाँ उपलब्ध है


3
यह उन लिंक्स में से एक है जो मैंने पाया कि चीजों को बहुत अच्छी तरह से समझाया नहीं गया :)। मुझे लगता है कि एक बात मुझे याद आ रही है कि वास्तव में स्किनेबल / टेम्पलटेबल क्या है और यह उपयोगकर्ता नियंत्रण के साथ क्यों नहीं किया जा सकता है। साथ ही, लिंक किए गए पोस्ट का अंतिम वाक्य है "आम तौर पर और बस बोलना, कस्टम नियंत्रण में उपयोगकर्ता नियंत्रण की तुलना में बेहतर लचीलापन और पुन: प्रयोज्य है"। यदि यह सच है, तो मैं कभी भी उपयोगकर्ता नियंत्रण क्यों बनाना चाहूंगा?
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.