यह "आसान" है!आप Silverlight से WPF तक थीम कैसे पोर्ट करते हैं?
मैं बस this blog post by Rudi Grobler पर आया जो कहता है कि सिल्वरलाइट से WPF तक थीम को पोर्ट करना "आसान" है। दुर्भाग्य से, वह यह नहीं कहता कि यह कैसे करें।
डाउनलोड करें और
मैं स्थापित किया है दोनों WPF Toolkit और Silverlight Toolkit Codeplex से स्थापित करें।
मैं भी the source code for the theme I'm interested in (BureauBlue) (चेतावनी, लोड करने में थोड़ी देर लगती है) खोला और खोला, और मेरी टेस्ट प्रोजेक्ट में एक ताजा संसाधन शब्दकोश फ़ाइल में चिपकाया।
केन्द्र शासित प्रदेशों ओह, टूटे संदर्भ
नीले टेढ़ी-मेढ़ी रेखाएं बहुत सारे।
alt text http://img32.imageshack.us/img32/6032/brokenreferences.jpg
यहाँ
कोई संदर्भ नहीं तो, मैं संदर्भ और जोड़ने के लिए गया था की खोज की है ... वे सूचीबद्ध नहीं हैं।
alt text http://img35.imageshack.us/img35/7466/addreferencedialog.jpg
आह, वहाँ वे
सौभाग्य से, मैं कुछ व्यापक ब्राउज़िंग के बाद उन्हें खोजने के लिए कर रहा था कर रहे हैं।
alt text http://img269.imageshack.us/img269/3830/addreferencedialogbrows.jpg
और इसलिए मैं उन्हें
जोड़ा करने के बाद लापता संदर्भ मिले, मैं उन्हें जोड़ने का प्रयास किया। यह वास्तव में टूट xmlns
लिंक (कम से कम नीले टेढ़ी-मेढ़ी रेखाएं चले गए) को हल करने लग रहा था, लेकिन जब मैं अपने प्रोजेक्ट बनाया मैं एक त्रुटि मिली:
Error 1 Unknown build error, 'Cannot resolve dependency to assembly 'System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.' NmtConcept
और, तो मैं पूछना ...
मैं WPF में सिल्वरलाइट थीम कैसे काम करूं?
अद्यतन!
ठीक है, मैंने सोचा कि मैंने इसे समझ लिया है। मैंने DataGrid
से शुरू करने का निर्णय लिया।मुझे पता चला कि सभी डब्ल्यूपीएफ समकक्ष सिल्वरलाइट असेंबली के लिए क्या थे, और मुझे वास्तव में संकलन और चलाने के लिए मेरी परियोजना मिली। और फिर मैं परिणाम देखा ...
alt text http://img44.imageshack.us/img44/2418/porteddatagrid.jpg
हैडर (लापता तरह तीर को छोड़ कर) कुछ हद तक सही है, लेकिन बाकी की तरह वहाँ तन रंग ईंटों को शामिल भयानक दुर्घटना के कुछ प्रकार था लग रहा है ।
यहां Silverlight Toolkit webpage पर उदाहरण दिया गया है।
alt text http://img196.imageshack.us/img196/997/silverlightdatagrid.jpg
तो, मैं भी पास नहीं आया था।
मैं
क्या मुझे क्या मैं इस गंदगी पर पहुंचने के लिए किया था की व्याख्या करने की अनुमति दें।
DataGridFrozenGrid
पहले, मैं this Silverlight Toolkit source code page से DataGridFrozenGrid
हड़पने के लिए क्योंकि WPF इस तरह के एक वर्ग कभी नहीं सुना था।
BureauBlue
तब मैं कुंजी टुकड़ेthe source code for BureauBlue से चिपकाया (फिर से, चेतावनी: इस बच्चे को लोड करने के लिए धीमी गति से होता है)।
कुंजी टुकड़े करके, मेरा मतलब है: फ़ाइल की शुरुआत में
- सभी ब्रश संसाधनों प्लस
Style
इन नियंत्रणों से प्रत्येक के लिए:- DataGridColumnHeader
- डेटाग्रिडसेल
- DataGridRowHeader
- DataGridRow
अजीब, मूल फ़ाइल DataGrid
खुद के लिए कोई शैली निहित (कृपया मुझे ठीक कर लें मैं गलत हूँ, लेकिन मुझे लगता है और सब कुछ करते थे)।
सिल्वरलाइट -> WPF
इसके बाद, मैं WPF समकक्ष xmlns
संदर्भ बदल दिया।यहाँ कैसे मेरी ResourceDictionary
तत्व निकला है:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mwc="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"
xmlns:mwcp="clr-namespace:Microsoft.Windows.Controls.Primitives;assembly=WPFToolkit"
xmlns:swcp="clr-namespace:System.Windows.Controls.Primitives;assembly=CommonLibraryWpf"
xmlns:sw="clr-namespace:System.Windows;assembly=WPFToolkit">
निश्चित रूप से मैं संपादित नाम स्थान टैग मिलान करने के लिए।
संपादित करें जब तक यह काम करता है
एक बार मैं यह सब काम कर रहे थे, मैं अभी भी कुछ मामूली समस्या नहीं थी। x:Name
तत्वों में से कुछ में रिक्त स्थान थे। कंपाइलर इसे अनुमति नहीं देगा, इसलिए मुझे स्पेस को अंडरस्कोर से बदलना पड़ा। - और अपने सभी समस्याओं का कारण हो सकता है - लेकिन मैं और क्या करने के लिए क्या करने के लिए पता नहीं था
<!-- Important: all underscores used to be spaces -->
<sw:VisualState
x:Name="MouseOver_CurrentRow_Selected">
<sw:VisualState
x:Name="Normal_CurrentRow">
<sw:VisualState
x:Name="Normal_Selected">
<sw:VisualState
x:Name="Normal_EditingRow">
<sw:VisualState
x:Name="Normal_AlternatingRow" />
<sw:VisualState
x:Name="Normal_Selected">
<sw:VisualState
x:Name="MouseOver_Selected">
<sw:VisualState
x:Name="Unfocused_Selected">
इन नामों को बदलने से एक बहुत बुरा विचार तरह लग रहा था:
यहाँ प्रासंगिक स्निपेट होते हैं, संकलन करने के लिए चीज प्राप्त करें।
अन्य परिवर्तन मैं बनाने के लिए किया था: शुरुआत में SolidColorBrush
और LinearGradientBrush
आइटम में से कुछ x:Name
बजाय x:Key
इस्तेमाल किया। मैंने उन सभी को x:Key
में बदल दिया। शायद यह भी एक बुरा विचार था, लेकिन फिर, कंपाइलर ने मुझे बनाया।
क्या इससे आपकी मदद करने में आपकी मदद मिलती है?
यदि आप अभी भी मेरे साथ हैं, तो क्या कोई सुझाव है?
आह, यह समझ में आता है। मेरे पास वास्तव में WPF थीम्स प्रोजेक्ट से ब्यूरोब्लू के लिए संसाधन शब्दकोश है, लेकिन इसमें 'डेटाग्रिड', 'डेटापिकर' और 'कैलेंडर' के लिए शैलियों शामिल नहीं हैं। – devuxer
ठीक है, मैंने इसे एक शॉट दिया (मेरे प्रश्न में अपडेट देखें), लेकिन यह बहुत अच्छा काम नहीं कर सका। – devuxer