2009-11-12 10 views
5

मैं WPF पर एक नया एप्लिकेशन शुरू करना चाहता हूं। WPF में नए उपयोगकर्ता इंटरफ़ेस को डेटाग्रिड व्यू नियंत्रण और प्रॉपर्टीग्रिड नियंत्रण की आवश्यकता है। लेकिन ऐसा लगता है कि ये दो नियंत्रण WPF में मौजूद नहीं होंगे और मैं WindowsFormsHost का उपयोग करके इन दो नियंत्रणों को होस्ट करना चाहता हूं।डब्ल्यूपीएफ में .NET 2.0 (विंडोज फॉर्म) नियंत्रणों का उपयोग करने की सीमाएं?

हालांकि, अगर मैं ऐसा करता हूं, तो क्या इस दृष्टिकोण के साथ कोई भी सीमा है?

उत्तर

5

मुख्य सीमा आप WPF के सभी शक्तिशाली सुविधाओं ढीला है जो: Data binding, ControlTemplates और DataTemplates, अनंत आकार, Zooms/घुमाव, Opacity, Attached Properties, बस कुछ ही नाम है। छोड़ने के लिए बहुत कुछ है! आपको पुरानी थकाऊ और त्रुटि-प्रवण WinForms तकनीकों का उपयोग करके इन नियंत्रणों को प्रोग्राम करना होगा, और उन सभी सीमाओं के साथ फिर से सौदा करना होगा जिन्हें आपने कई वर्षों से मुक्त किया था।

DataGridView

नेट फ्रेमवर्क 3.5 एसपी 1 एक DataGrid कि काम करते हैं हो सकता है, और तीसरे पक्ष के नियंत्रण के कई Xceed से एक के रूप में इस तरह के लिए कर रहे हैं। एक डब्ल्यूपीएफ-आधारित ग्रिड का उपयोग करने से ग्रिड के अंदर पूर्ण डेटा बाध्यकारी, टेम्पलेटिंग और स्टाइलिंग की अनुमति मिलती है, यदि आप WinForms 'DataGridView का उपयोग करते हैं तो यह संभव नहीं होगा।

PropertyGrid

कारण WPF एक PropertyGrid साथ नहीं आता है कि इसे का उपयोग क्या WPF से मिलने वाली पुनः बनाना इतना आसान है: एक साधारण लिस्टबॉक्स, क्या करेंगे ठीक से स्टाइल, केवल कुछ ही लाइनों के साथ कोड के पीछे।

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

public class PropertyGrid 
{ 
    ... 
    public static readonly DependencyProperty SelectedObjectProperty = ... 
    { 
    PropertyChangedCallback = (obj, e) => 
    { 
     PropertyItems = 
     from pi in SelectedObject.GetType().GetProperties() 
     select new PropertyGridItem { Object = SelectedObject, PropertyInfo = pi }; 
    } 
    } 
} 

public class PropertyInfo 
{ 
    public object Object; 
    public PropertyInfo PropertyInfo; 
    public object Value 
    { 
    get { return PropertyInfo.GetValue(Object); } 
    set { PropertyInfo.SetValue(Object, value); } 
    } 
    public string Category 
    { 
    get 
    { 
     return (
     from attrib in PropertyInfo.GetCustomAttributes().OfType<CategoryAttribute>() 
     select attrib.Name 
    ).FirstOrDefault(); 
    } 
    } 
} 

:

यहाँ कुछ WPF में एक PropertyGrid को लागू करने के पीछे महत्वपूर्ण अवधारणाओं को दर्शाता हुआ कोड है: श्रेणी द्वारा समूहबद्ध करने के साथ बस एक सूची बॉक्स का उपयोग करें, और ItemTemplate जिसमें DockPanel शामिल है जिसमें संपत्ति संपादक को मुद्रित करने के लिए एक निश्चित चौड़ाई TextBlock और ContentPresenter शामिल है।

+0

हालांकि मैंने घर से उगाए गए प्रॉपर्टीग्रिड का उपयोग किया है, लेकिन आप फ्रैंसी पेनोव का उल्लेख करते हुए कोडप्लेक्स पर भी एक को देखना चाहेंगे। –

2

सबसे पहले, वहाँ तीसरे पक्ष property grids और datagrids WPF के लिए हैं, और ये आम तौर पर WPF के अतिरिक्त स्टाइल क्षमताओं का समर्थन और WPF अनुप्रयोगों के साथ अधिक मुहावरे में फिट होगा। इसलिए आपको WinForms पर वापस जाने की आवश्यकता नहीं है, और शायद तब तक नहीं होना चाहिए जब तक कि तृतीय पक्ष या टूलकिट नियंत्रण वास्तव में एक विकल्प न हों।

यदि आपको WinForms पर वापस जाना है, तो मुख्य सीमा "एयरस्पेस नियम" के बारे में जागरूक होने के लिए है: आपके पास WinForms और WPF नियंत्रण एक दूसरे को ओवरलैप नहीं कर सकते हैं। इसके अलावा WinForms नियंत्रण डब्ल्यूपीएफ डेटा बाध्यकारी में भाग नहीं ले सकता है और पुराने-स्कूल प्रक्रियात्मक कोड का उपयोग करके संबोधित किया जाना चाहिए, हालांकि आप इसे आसपास के आसपास काम करने के लिए उपयोगकर्ता नियंत्रण में encapsulate कर सकते हैं। इसके अलावा, यदि आप फैंसी दृश्य प्रभाव करने की कोशिश कर रहे हैं तो वे WinForms नियंत्रणों के साथ बहुत अच्छी तरह से काम नहीं कर सकते हैं: यदि आप WinForms नियंत्रण के आसपास में परिवर्तन या एनिमेशन कर रहे हैं तो एयरस्पेस नियम आपको कठिन काटने की संभावना है। लेकिन दृष्टिहीन सरल अनुप्रयोगों के लिए उन्हें ठीक काम करना चाहिए।

1

WPF Toolkit में एक डाटाग्रिड नियंत्रण है। कोडप्लेक्स पर भी एक तीसरी पार्टी PropertyGrid control भी है (बहुत अनुमोदित एमएस-पीएल लाइसेंस के तहत)।

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