Silverlight 4-在另一个ResourceDictionary中使用StaticResource

|| 如果我有这些字典: 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>
只要您在另一本字典之前定义字典,我有点惊讶与上面类似的内容将不起作用。     
您可以按照@Anthony提出的方式进行操作,但是这里有一个警告-例如,如果您在其他5个词典中使用第一个资源词典,那么它将被加载5次,而您将拥有6个副本相同的资源字典(以防您在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> 
    

要回复问题请先登录注册