विंडोज फॉर्म से WPF में संक्रमण


113

अब लंबे समय से, मैं विंडोज फॉर्म के विकास के साथ फंस गया हूं (VB6 के साथ शुरू हुआ, और C # .NET 4.5 के माध्यम से जारी रहा है), और मैं बहुत ज्यादा हिट करता हूं कि विंडोज फॉर्म क्या कर सकता है, दोनों शुद्ध .NET का उपयोग करके। , और मूल कोड के साथ विशेष प्रभाव।

मैंने WPF और XAML सीखने की कोशिश की है, लेकिन मैं WPF के नए डिजाइनर में सही फंस गया हूं। यह वास्तव में विंडोज फॉर्म डिजाइनर की तुलना में उपयोग करना बहुत मुश्किल लगता है।

मैं जानना चाहता हूं कि क्या .NET के WPF डिजाइनर के लिए कोई विकल्प हैं, जो कि विंडोज फॉर्म डेवलपर्स के लिए अधिक अनुकूल हैं?


7
मैं आमतौर पर डिजाइनर का उपयोग नहीं करता हूं, यह जांचने के लिए सहेजें कि क्या समग्र लेआउट वह है जो मैं उम्मीद करूंगा; अंत में मैं एक्सएएमएल में हाथ से सब कुछ लिखता हूं और / या जरूरत पड़ने पर ब्लेंड का उपयोग करता हूं - हालांकि मैं एक डिजाइनर नहीं हूं ताकि मुश्किल से कभी भी ऐसा न हो।
पैट्रिक Patwiek

आप अभिव्यक्ति मिश्रण का उपयोग कर सकते हैं, लेकिन मुझे नहीं लगता कि यह वास्तव में कोई आसान है, यह डेवलपर्स के लिए डिजाइनरों की तुलना में अधिक है IMO। मैं आम तौर पर सिर्फ पूर्वावलोकन बंद कर देता हूं और xml के साथ काम करता हूं।
दिसंबर को ब्लैकिस

5
इसका उपयोग करना मुश्किल नहीं है, आप बस इसके अभ्यस्त नहीं हैं। दूर करने के लिए सबसे बड़ी बाधा दो प्रौद्योगिकियों के बीच प्रतिमान बदलाव है। अपने आप को एक्सएएमएल पर एक अच्छी पुस्तक प्राप्त करें, एक बार जब आप एक्सएएमएल के लिए अभ्यस्त हो जाते हैं तो आप अब डिजाइनर का उपयोग नहीं करेंगे - आप सीधे एक्सएएमएल टाइप करेंगे।
slugster

3
@slugster, मैंने उसके बारे में आश्चर्य किया। एचटीएमएल के साथ भी यही हुआ ... मैंने ड्रीमविवर के साथ यूआई का निर्माण किया, और अब मैं एचटीएमएल को हाथ से कोड करता हूं
मैथ्यू लेटन

जवाबों:


175

मुझे WPF के लिए शुरुआती लेखों के बारे में ब्लॉग करना पसंद है, और विशेष रूप से कुछ ऐसे हैं जो आपकी मदद कर सकते हैं:

संक्षेप में, Winforms और WPF के बीच सबसे बड़ा अंतर यह है कि WPF में आपके डेटा लेयर (a) DataContext ) आपका एप्लिकेशन है, जबकि Winforms में आपका UI लेयर आपका एप्लिकेशन है।

WPF के साथ इसे दूसरे तरीके से देखने के लिए, आपके एप्लिकेशन में आपके द्वारा बनाई गई ऑब्जेक्ट्स होते हैं, और आप WPF को बताने के लिए टेम्प्लेट और अन्य UI ऑब्जेक्ट्स का उपयोग करते हैं कि आपके एप्लिकेशन घटकों को कैसे आकर्षित किया जाए।

यह WinForms के विपरीत है जहां आप अपने एप्लिकेशन को UI ऑब्जेक्ट्स से बाहर बनाते हैं, और फिर उन्हें आवश्यक डेटा के साथ आपूर्ति करते हैं।

इस वजह से, डिज़ाइनर का वास्तव में उपयोग नहीं किया जाता है क्योंकि आपके एप्लिकेशन घटकों को कोड में डिज़ाइन किया गया है, और डिज़ाइनर को केवल एक उपयोगकर्ता के अनुकूल इंटरफेस बनाने की आवश्यकता होती है जो आपके डेटा वर्गों (आमतौर पर Modelsऔर ViewModels) को दर्शाता है

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

तो आपके सवाल का जवाब देने के बारे में कि अगर अन्य WPF डिज़ाइनर हैं जो WinForms Developers के लिए उपयुक्त हैं, तो मैं सुझाव दूंगा कि किसी अन्य डिज़ाइनर की तलाश करने के बजाय, यह जानने के लिए देखें कि WPF का उपयोग किस तरह से किया जाना है। WinForms की तरह WPF का उपयोग करने का मतलब है कि आप बहुत याद करते हैं जो इसे इतना महान बनाता है :)


14
@Rachel से पूरी तरह सहमत हैं। WPF के प्रकाश में आने पर सबसे महत्वपूर्ण अहसास यह समझना है कि UI डेटा नहीं है और तदनुसार कार्य करता है।
फेडेरिको बेरासैटुई

2
@ राचेल - सिर्फ शैतान के वकील की भूमिका निभाने के लिए: यूआई (जो बटन, पाठ बॉक्स आदि विंडो में दिखाई देते हैं) के साथ शुरू होने से आप क्या करना चाहते हैं, उस पर ध्यान केंद्रित करने में मदद मिलती है। बाकी आप इसे कैसे करना चाहते हैं, इसका केवल कार्यान्वयन विवरण है।
आसफ

3
@HighCore stackoverflow.com/questions/982978/mvvm-for-winforms पर एक नज़र डालें और आपको यह स्वीकार करना होगा कि Winforms केवल एक दृश्य / UI घटक है जिसमें व्यावसायिक ऑब्जेक्ट उपयोगकर्ता नियंत्रणों के लिए बाध्य हो सकते हैं। ठीक है: WPF MVVM के लिए अधिक उपयुक्त है लेकिन फिर भी Winforms ऐसे डिज़ाइन पैटर्न में भी काम कर सकते हैं। और जैसा कि राहेल बताता है "यह WinForms के विपरीत है जहां आप अपने एप्लिकेशन को UI ऑब्जेक्ट्स से बाहर बनाते हैं, और फिर उन्हें आवश्यक डेटा के साथ आपूर्ति करते हैं।" यह हालांकि के लिए बहुत असत्य है। मैं हमेशा कम से कम डेटा और व्यू के तरीके से सोचता हूं। डेटा और Winforms / WPF / HTML जो भी हो।
बर्नौली आईटी

2
यह डेटा प्रविष्टि / संशोधन के स्तर पर डेटाबाइंडिंग का कम से कम समर्थन करता है। और उन 99.9999999% डेवलपर्स को भी WPF I पर संदेह होगा। लेकिन हम इस चर्चा को समाप्त करें। WPF MVVM और चिंताओं को अलग करने के लिए WPF बिल्कुल अधिक शक्तिशाली / उपयुक्त है, लेकिन मुझे लगता है कि आप और एक नकारात्मक कोने में राहेल पुश विन्फोर्स भी। खासकर जब आप अपने द्वारा उपयोग किए जाने वाले शब्दों का उपयोग करते हैं ...
बर्नोली आईटी

3
@ YoupTube आप सही हैं, Winforms डेटा बाइंडिंग का समर्थन करता है, और उन मामलों के लिए अपने स्वयं के कस्टम बाइंडिंग बनाना संभव है जहां डिफ़ॉल्ट बाइंडिंग सिस्टम भी काम नहीं करेगा। मैंने इस उत्तर और मेरे ब्लॉग लेख को शुरुआती लोगों को ध्यान में रखते हुए लिखा है, और आमतौर पर शुरुआती यूआई घटकों के संदर्भ में सोचते हैं, डेटा ऑब्जेक्ट नहीं। इसके अलावा, WinForms में बाइंडिंग हमेशा उस स्थिति में मौजूद नहीं थी जो अब ऐसा करती है, इसलिए कई डेवलपर्स जो WinForms के साथ बड़े हुए हैं, या जो अन्य तकनीकों के लिए उपयोग किए जाते हैं जो बाइंडिंग का उपयोग नहीं करते हैं, अक्सर स्विच करते समय इस महत्वपूर्ण अंतर की पहचान नहीं करेंगे। एक बाध्य वास्तुकला के लिए। :)
राहेल

9

हालांकि, कुछ लोग सहमत नहीं हैं, मैं भी वीएस डिजाइनर का उपयोग नहीं करने के लिए पुनर्मिलन होगा। कम से कम एक इंटरफ़ेस बनाने के लिए नहीं। यदि आप आवेदन शुरू किए बिना अपने कार्यान्वयन की पहली छाप प्राप्त करना चाहते हैं, तो यह कम से कम लंबे समय तक परिष्कृत चीजों की तरह एक अच्छा दर्शक है Stylesऔर Templatesइसका उपयोग किया जाता है। लेकिन, IMHO, इसके ड्रैग एंड ड्रॉप रिजल्ट को केवल प्रोटोटाइप के रूप में इस्तेमाल किया जाना चाहिए और इसलिए अब इसकी आवश्यकता नहीं होने के बाद इसे छोड़ दिया जाना चाहिए।

यहाँ कुछ कारण दिए गए हैं जो मेरे लिए महत्वपूर्ण हैं कि इसका उपयोग न करें।

  1. VS डिजाइनर फिक्स मार्जिन और अलाइनमेंट्स के साथ काम कर रहा है (जो कि आमतौर पर आवश्यक नहीं है, यदि आप लेआउट नियंत्रणों का उपयोग कर रहे हैं), तो इसका मतलब है कि आपको कई नियंत्रणों को छूना होगा, यदि आवश्यकताओं को बदल दिया जाए। यदि आप XAML और WPF यांत्रिकी में गहरे हैं, तो आप एक ऐसा एप्लिकेशन बना सकते हैं जिसे छोटे प्रयास से संशोधित किया जा सकता है, लुक और फील के बारे में।

  2. चूँकि डिज़ाइनर xaml जेनरेट कर रहा है, रचना इष्टतम नहीं है और UI बुरी तरह से प्रदर्शन कर सकता है। मैंने इसे मापा नहीं, यह सिर्फ एक एहसास है।

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

अपने प्रश्न पर वापस, IMHO, और मुझे लगता है कि बहुत से लोग सहमत हैं, अपने आप को एक अच्छी पुस्तक प्राप्त करें जैसे कि WPF अनलेशेड और बाद में, यदि आप विवरण के बारे में अधिक जानना चाहते हैं, तो WPF प्रो । इसमें बहुत सारी विशेषताएं हैं जो अलग-अलग हैं Winforms। आप किसी भी डिजाइनर का उपयोग करके उन्हें नहीं जान पाएंगे। मुझे लगता है कि यह सबसे अच्छा तरीका है।

कृपया यह भी विचार करें कि वहाँ कई रूपरेखाएँ और पुस्तकालय हैं (उदाहरण के लिए MVVM प्रकाश , WPFToolkit ), जो पहले से ही कुछ सामान्य समस्याओं को हल कर रहे हैं। इसलिए पहिया को सुदृढ़ करना आवश्यक नहीं है।


9

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

उदाहरण के लिए, आप Winforms की तरह मार्जिन-आधारित लेआउट से स्विच कर सकते हैं जो कि एक नियंत्रण छोड़ने पर डिफ़ॉल्ट रूप से अधिक WPF-ish शैली पर राइट-क्लिक करके और 'रीसेट लेआउट' का चयन करके होता है।

यह वीडियो इसी तरह के मैदान को कवर करता है।

मैं अभी भी संतुलन पर VS2010 के डिजाइनर को पसंद करता हूं - VS2013 तब लगता है जब TabItems ** पर खींचते और छोड़ते समय थोड़ा सा छोटी गाड़ी लगती है, (जो कि मेरी वर्तमान परियोजना बहुत उपयोग करती है) - लेकिन VS2013 दस्तावेज़ रूपरेखा दृश्य आपको उस दृश्य में भी चीज़ों को स्थानांतरित करने देता है। , जो एक वास्तविक प्लस हो सकता है।

वास्तव में, हालांकि, WPF और xaml का अधिकतम लाभ उठाने के लिए, आपको डिज़ाइनर दृश्य और xaml दृश्य और उन दोनों के बीच स्विच करने में यथोचित धाराप्रवाह होने की आवश्यकता है; यदि आप डिजाइनर से दूर भागते हैं, तो आप किसी ऐसी चीज़ को याद कर रहे हैं जो आपकी बहुत मदद कर सकती है।

** संपादित करें - हालांकि यह VS 2013 के लिए अपडेट 3 में सुधार किया गया है, और VS14 के पूर्वावलोकन में, आज तक मुझे कई बार अजीब व्यवहार मिलता है।


7

सबसे पहले, Visual Studio deisgner में WPF (XAML) में, आपको हमेशा यूआई बनाने के लिए xaml कोड का उपयोग करना चाहिए और आपको नियंत्रण को ड्रैग और ड्रॉप नहीं करना चाहिए! आपको अपना कोड साफ रखना होगा। आप अपनी सहायता के लिए एक्सप्रेशन ब्लेंड का उपयोग कर सकते हैं, यह ड्रैग एंड ड्रॉप के साथ अधिक ग्राफिक उन्मुख है, लेकिन यह मुफ़्त नहीं है।

यह एक बड़ा सीखने की अवस्था नहीं है, लेकिन मुझे लगता है कि आपको विकल्प की तलाश करने के बजाय अपने xaml को हाथ से कैसे सीखना चाहिए।


1
ड्रैग-एन-ड्रॉप कोई नुकसान नहीं है, हालांकि यदि आप टाइपिंग पसंद करते हैं, तो यह भी ठीक है। मैन्युअल रूप से टाइपिंग WPF की कुंजी नहीं है।
डेविड

3
जब आप WPF में ड्रैग और ड्रॉप करते हैं, तो मैं देखता हूं कि आपके पास अक्सर -1200 का मार्जिन होता है और इस तरह की चीजें, जो बिल्कुल भी समझ में नहीं आती हैं ... मैंने हमेशा इसे हाथ से किया है यह सुनिश्चित करने के लिए बेहतर है
mlemay

1
यह ऑफ टॉपिक है। सुनिश्चित करें कि आपकी समस्या सभी के लिए सामान्य है, न कि केवल स्वयं। इसके अलावा, आप यह नहीं कह सकते कि ड्रैग-एन-ड्रॉप खराब है, अगर आपको कुछ समस्याएं हैं। डिजाइनर पर भरोसा करना अभी भी आवश्यक है और कभी-कभी इष्ट है, आप देख सकते हैं यह सच है, अगर आप जानते हैं कि डिजाइनर और डेवलपर्स दोनों द्वारा अभिव्यक्ति का स्वागत कैसे किया जाता है।
डेविड

1
हाँ अगर आप अभिव्यक्ति मिश्रण का उपयोग करते हैं, तो ठीक है, आप इसे कर सकते हैं, लेकिन मैं दृश्य स्टूडियो में बात कर रहा था ...
mlemay

12
मुझे लगता है कि फॉर्म से आने वाले किसी व्यक्ति को सलाह देना और डिजाइनर का उपयोग न करने के लिए डब्ल्यूपीएफ शुरू करना एक बहुत बुरा विचार है। XAML को समझने का सबसे तेज़ तरीका ड्रैग और ड्रॉप का उपयोग करना और फिर कोड का निरीक्षण करना है।
उकोदिया

7

मैंने इस प्रक्रिया के माध्यम से जैसा आपने किया है। बाद में मैं अपनी कंपनी WPF में सभी को पढ़ा रहा था। कुछ महत्वपूर्ण सबक हैं जो मैंने सीखा है और हर कोई जानता है कि डब्ल्यूपीएफ के साथ कौन काम करता है।

  1. यदि आप कोड के पीछे UI नियंत्रण के साथ काम कर रहे हैं, तो ... आप इसे गलत कर रहे हैं। पीछे के कोड में UI नियंत्रण से निपटने के लिए आपके लिए कोई आवश्यकता नहीं है।
  2. इस पर क्लिक करने के लिए आपको विजुअल डेवलपर की आवश्यकता नहीं है। आप केवल XAML के साथ काम करके बहुत अधिक उत्पादक हैं। कॉपी / पेस्ट का उपयोग करें। अपनी टाइपिंग क्षमताओं पर भरोसा न करें। यह बहुत सारे सिरदर्द को बचाएगा।
  3. एक्सएएमएल को एक ऐसी खिड़की के रूप में सोचें जो डेटा को खो देती है। पीछे कोड में आप डेटा बदल रहे हैं। XAML में आप परिभाषित कर रहे हैं कि यूआई डेटा की व्याख्या कैसे करेगा।
  4. कन्वर्टर्स कमाल के हैं। जैसे ही आपको कन्वर्टर्स की एक महत्वपूर्ण राशि मिलती है, आपकी उत्पादकता स्काई हाई को रॉकेट करेगी। वे नियंत्रण इवेंटहैंडलर की पागल राशि की भूमिका निभाएंगे जो छिपाना या आकार बदलना या यूआई के बारे में कभी भी,

यह यूआई विकास को मजेदार बनाता है। विशेष रूप से एक बार जब आपको पता चलता है कि यह एसाइक प्रक्रियाओं के साथ कैसे खेलना पसंद करता है। यह वास्तव में बहुत सारे सिरदर्द को दूर करता है जो विनफॉर्म के कारण थे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.