如果我有这些词典:
dict1.xaml:
<颜色x:键=“颜色1”>红色< /颜色>
dict2.xaml:
< SolidColorBrush x:Key =“Brush1”Color = {StaticResource Color1} />
这有效:
App.xaml中:
<MergedDictionaries> <ResourceDictionary Source="dict1.xaml"/> <MergedDictionaries>
SomePage.xaml:
<UserControl.Resources> <MergedDictionaries> <ResourceDictionary Source="dict2.xaml"/> </MergedDictionaries> </UserControl.Resources>
这不是:
App.xaml在应用程序级别合并.
我收到一个关于找不到Color1的错误.
为什么是这样 ? /它有办法解决吗?我知道这个例子很简单,但真正的例子太长了.基本上我只是想在不同的文件中组织我的样式和模板:
>一个颜色
>一个用于隐式样式
>许多用于显式样式
编辑:奇怪的是,如果我在Application_Startup上的代码中执行此操作,在设置RootVisual属性之前,我没有收到错误…我只是为什么感到困惑!
解决方法
不幸的是,你在Silverlight资源系统中遇到了一个烦人的限制,我只能想象这是一些优化问题.这里似乎有一些异步行为,其中MergedDictionaries中的每个字典都是并行加载的,因此当加载“dict2.xaml”时,你不能依赖于存在的“dict1.xaml”内容.
最简单的解决方案是在Dict2中包含Dict1的合并: –
App.xaml中:
<ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="dict2.xaml" /> <ResourceDictionary.MergedDictionaries>
Dict2.xaml:
<ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="dict1.xaml" /> </ResourceDictionary.MergedDictionaries> .... <!-- dict2 resource --> </ResourceDictionary>