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

Kir*_*Kir 7 silverlight 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>
Run Code Online (Sandbox Code Playgroud)

SomePage.xaml:

<UserControl.Resources>
  <MergedDictionaries>
    <ResourceDictionary Source="dict2.xaml"/>
  </MergedDictionaries>
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)

这不是:

App.xaml在应用程序级别合并.

我收到有关未找到Color1的错误.

为什么是这样 ?/它有办法解决吗?我知道这个例子很简单,但真正的例子太长了.基本上我只是想在不同的文件中组织我的样式和模板:

  • 一个颜色
  • 一个用于隐式样式
  • 许多用于显式样式

编辑:奇怪的是,如果我在代码中执行此操作Application_Startup,在设置RootVisual属性之前,我没有收到错误...我只是为什么感到困惑!

Ant*_*nes 5

不幸的是,你在Silverlight资源系统中遇到了一个烦人的限制,我只能想象这是一些优化问题.这里似乎有一些异步行为,其中每个字典MergedDictionaries都是并行加载的,因此当加载"dict2.xaml"时,你不能依赖于"dict1.xaml"的内容.

最简单的解决方案是在Dict2中包含Dict1的合并: -

App.xaml中:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="dict2.xaml" />
<ResourceDictionary.MergedDictionaries>
Run Code Online (Sandbox Code Playgroud)

Dict2.xaml:

<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="dict1.xaml" />
    </ResourceDictionary.MergedDictionaries>
    .... <!-- dict2 resource -->
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)