我开发了一个允许用户在主题之间切换的应用程序。我这样做是通过将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
不同之处在于这些主题包含多个文件。所以我创建了一个仅包含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'.
为了清楚起见,当我在App.xaml中设置时,使用MergedDictionaries方法可以正常工作:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Themes/Cosmopolitan/Theme.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
我做错了什么?
谢谢!
答案 0 :(得分:10)
当您使用MergedDictionary时,您必须使用如下所示的完全限定名称。
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/SilverlightApplication1;component/Themes/Cosmopolitan/Theme.xaml"/>
另外,请注意,在程序集名称之前不要错过斜杠。换句话说,它应该像
Source="/SilverlightApplication1;
不喜欢
Source="SilverlightApplication1;
HTH