2009-10-23 12 views
7

यह "आसान" है!आप 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 से चिपकाया (फिर से, चेतावनी: इस बच्चे को लोड करने के लिए धीमी गति से होता है)।

कुंजी टुकड़े करके, मेरा मतलब है: फ़ाइल की शुरुआत में

  1. सभी ब्रश संसाधनों प्लस
  2. 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 में बदल दिया। शायद यह भी एक बुरा विचार था, लेकिन फिर, कंपाइलर ने मुझे बनाया।


क्या इससे आपकी मदद करने में आपकी मदद मिलती है?

यदि आप अभी भी मेरे साथ हैं, तो क्या कोई सुझाव है?

उत्तर

2

मैं मूल रूप से इस निष्कर्ष पर आया कि मैं एक गोल छेद में एक स्क्वायर पेग फिट करने की कोशिश कर रहा था (दावों के बावजूद कि यह "आसान" है)। सिल्वरलाइट DataGrid डब्ल्यूपीएफ टूलकिट DataGrid से बहुत अलग है। तो, इस पल के लिए, मैं बस ब्यूरोब्लू की तरह दिखने के लिए डिफ़ॉल्ट डेटा ग्रिड शैली बनाने की कोशिश कर रहा हूं। यह काफी दर्दनाक काम है और बिल्कुल सही है, लेकिन यह पोर्ट की शैली पर एक निश्चित सुधार है।

alt text http://img26.imageshack.us/img26/7163/styleddatagrid.jpg

1

मुझे लगता है कि अनसुलझा संदर्भ System.Windows.dll के सिल्वरलाइट संस्करण के लिए है। डीएलएस के डब्ल्यूपीएफ संस्करण को इंगित करने के लिए आपको थीम प्रोजेक्ट में संदर्भों को बदलना होगा।

आप WPF themes प्रोजेक्ट (रुडी ग्रोबलर द्वारा समन्वित) को भी देख सकते हैं, जिसमें पहले से ही ब्यूरोब्लू है।

+0

आह, यह समझ में आता है। मेरे पास वास्तव में WPF थीम्स प्रोजेक्ट से ब्यूरोब्लू के लिए संसाधन शब्दकोश है, लेकिन इसमें 'डेटाग्रिड', 'डेटापिकर' और 'कैलेंडर' के लिए शैलियों शामिल नहीं हैं। – devuxer

+0

ठीक है, मैंने इसे एक शॉट दिया (मेरे प्रश्न में अपडेट देखें), लेकिन यह बहुत अच्छा काम नहीं कर सका। – devuxer

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