2010-06-11 72 views
7

我開發了一個允許用戶在主題之間切換的應用程序。我被包括XAML文件在我的項目資源,並使用下面的代碼這樣做:在Silverlight中使用資源字典作爲主題

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

不同的是,這些主題由多個文件組成。所以我製作了一個只包含MergedDictionaries的Theme.xaml文件,這樣我仍然可以使用上面的代碼。這是Cosmopolitan主題的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> 

然而,當我運行的C#代碼上面,我得到以下異常:

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 2010-06-13 11:36:57

+0

我有一個類似的問題原因是在引用文件時使用了反斜槓(\)而不是正斜槓(/).VS中的xaml解析器能夠解析位置,但是在運行時會產生一個錯誤,希望這會幫助其他人out。 – 2011-08-09 18:26:47

回答

10

當您使用MergedDictionary時,您必須使用下面的完全限定名稱。

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

此外,請注意,您不應該在程序集名稱之前忽略斜線。換句話說,它應該像

Source="/SilverlightApplication1; 

不喜歡

Source="SilverlightApplication1; 

HTH

+5

你不必把'component'放在船尾呃程序集名稱「/SilverlightApplication1;component/Themes/Cosmopolitan/Theme.xaml」 – user20358 2010-12-12 09:01:57

+0

是的,你應該把組件。這是正確的。 – Lance 2011-09-15 04:12:09

+1

@王子:組成部分是必不可少的。請考慮更新您的答案。在更新之後這將是一個很好的答案。 – 2011-12-14 23:28:42