2010-06-11 18 views
7

में थीम के रूप में संसाधन शब्दकोश का उपयोग करें मैंने एक ऐसा ऐप्लिकेशन विकसित किया है जो उपयोगकर्ता को विषयों के बीच स्विच करने की अनुमति देता है। मैं अपने प्रोजेक्ट में एक संसाधन के रूप XAML फाइल सहित और निम्नलिखित कोड का उपयोग करके यह कर रहा हूँ:सिल्वरलाइट

MainTheme.ThemeUri = new Uri("SilverlightApplication1;component/Themes/[ThemeName]/Theme.xaml", UriKind.Relative); 

यह अच्छी तरह से काम किया, तक मैं इन विषयों पाया: http://timheuer.com/blog/archive/2010/05/17/silverlight-4-tools-released-and-new-application-templates.aspx

अंतर यह है कि इन विषयों है कई फाइलें शामिल हैं। इसलिए मैंने एक थीम.एक्सएमएल फ़ाइल बनाई जिसमें केवल मर्ज किए गए शब्दकोश शामिल हैं, इसलिए मैं अभी भी ऊपर दिए गए कोड का उपयोग कर सकता हूं। यह कॉस्मोपॉलिटन थीम के लिए Theme.xaml फ़ाइल है।

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="CoreStyles.xaml"/> 
     <ResourceDictionary Source="SDKStyles.xaml"/> 
     <ResourceDictionary Source="Styles.xaml"/> 
     <ResourceDictionary Source="ToolkitStyles.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

हालांकि, जब मैं सी # कोड को चलाने के ऊपर मैं निम्नलिखित अपवाद:

System.Windows.Markup.XamlParseException: Failed to assign to property 'System.Windows.ResourceDictionary.Source'. 

बस MergedDictionaries पद्धति का उपयोग करके स्पष्ट होना, कार्य करता है जब मैं अपने App.xaml में सेट:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Themes/Cosmopolitan/Theme.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

मैं क्या गलत कर रहा हूं?

धन्यवाद!

+0

मेरी Theme.xaml फ़ाइल में पूर्ण पथ की स्थापना भी काम नहीं करता है :( – SaphuA

+0

मैं एक ऐसी ही समस्या थी होना चाहिए और कारण फ़ाइल को संदर्भित करते समय आगे स्लैश (/) के बजाय बैकस्लैश (\) का उपयोग कर रहा था। वीएस में xaml पार्सर स्थान को हल करने में सक्षम था, लेकिन रन टाइम पर एक त्रुटि उत्पन्न की जा रही थी। उम्मीद है कि यह किसी और की मदद करेगा बाहर –

उत्तर

10

जब आप MergedDictionary का उपयोग कर रहे हैं तो आपको नीचे दिए गए पूर्ण योग्य नाम का उपयोग करना होगा।

<ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="/SilverlightApplication1;component/Themes/Cosmopolitan/Theme.xaml"/> 

इसके अलावा, ध्यान दें कि आपको असेंबली नाम से पहले स्लैश याद नहीं करना चाहिए। दूसरे शब्दों में, यह कैसा

Source="/SilverlightApplication1; 

नहीं चाहते

Source="SilverlightApplication1; 

HTH

+5

आपको 'घटक' aft रखना नहीं है विधान सभा का नाम "/ सिल्वरलाइट अनुप्रयोग 1 ;component/Themes/Cosmopolitan/Theme.xaml" – user20358

+0

हां आपको घटक रखना चाहिए। यह सही है। – Lance

+1

@ प्रिंस: घटक भाग आवश्यक है। कृपया अपना उत्तर अपडेट करने पर विचार करें। यह अद्यतन के बाद यह एक अच्छा जवाब होगा। –