的Silverlight 4 - 使用静态资源从一个资源字典在其他
如果我有这些词典:的Silverlight 4 - 使用静态资源从一个资源字典在其他
dict1.xaml: <Color x:Key="Color1">Red</Color>
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”存在的内容。
最简单的解决方案是包括Dict1在Dict2合并: -
的App.xaml:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="dict2.xaml" />
<ResourceDictionary.MergedDictionaries>
Dict2.xaml:
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="dict1.xaml" />
</ResourceDictionary.MergedDictionaries>
.... <!-- dict2 resource -->
</ResourceDictionary>
这将是App.xaml中
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="dict1.xaml" />
<ResourceDictionary Source="dict2.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
只要你定义在另一个之前,我与上述类似的是行不通的一个小惊喜的东西字典。
我已经尝试过,发布本作之前那将是明显的罪魁祸首。但是,没有这样的运气。它似乎试图同时解决,这只是对我的可笑气愤,因为我不能看到你想要这种行为的一个案例,特别是如果MS不给我们'DynamicResource' – Kir 2011-04-22 19:20:10
它可能会有所帮助你的app.xaml就像你失败时所拥有的一样。我自己做了这件事,看不到或想到我需要做的任何特殊工作 – tam 2011-04-22 19:24:09
这就是我所有的应用程序xaml除了文件声明(我没有碰到的东西)之外。 当你说你已经做了这个,你有没有字典,其中一个引用另一个定义的资源?因为从字面上看,我已经在一个完全新的项目中转载了这个项目,除了两个字典,合并的字典和一个使用一个字典中的文本块的页面之外,没有其他任何字符(尽管我认为它没有那么远) – Kir 2011-04-22 21:12:28
你可以做一个由@Anthony提出的方式,但这里有一个警告 - 如果你在例如5个其他字典中使用你的第一个资源字典,那么它将被加载5次,并且你将有6个相同资源字典的副本ary(这是在App.xaml中引用它的情况),这对性能不是很好。这可以使用Silverlight的资源字典的小类从这里修复 - http://softnotes.wordpress.com/2011/04/05/shared-resourcedictionary-for-silverlight/。
我和谭在这一个。 “合并资源字典集合中的资源查找逻辑处于最后,首先出现。”换句话说,如果你有多个字典引用另一个字典,那么包含引用资源的字典必须位于堆栈的顶部。请确保您引用他们在正确的顺序和小心,以确保在堆栈的顶部的字典对词典不依赖于栈底
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dict1.xaml" />
<ResourceDictionary Source="dependsOnDict1.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
这不是展示的行为。如果是这样的话,那就没有问题了,一年前我不会发布这个问题。试试看看:) – Kir 2012-02-29 15:31:35
有没有人得到这个在Windows 8/Metro工作? – Nilzor 2013-02-03 18:42:53