WPF资源合并到Application.Resources但未在运行时解析

时间:2010-03-30 08:23:54

标签: wpf resources resourcedictionary

我有一个刷子,它是合并到ResourceDictionary的{​​{1}}的一部分。

但由于某种原因,在将样式应用于其中一个控件时,它在运行时无法解析。但是,如果在抛出异常时从立即窗口调用Application.Current.FindResource(“BrushName”),则会找到该资源。

我错过了什么吗?是不是WPF应该尝试在应用程序的资源中查找资源?

更新 应用程序非常大,所以我无法发布所有实际代码,但这里是资源合并和使用的方式:

Application.Resources

Brushes.xaml

<ResourceDictionary ...> <SolidColorBrush x:Key="BrushName" Color="#12345678" /> </ResourceDictionary>

SomeStyles.xaml

<ResourceDictionary ...> <Style x:Key="SomeStyle"> <Setter Property="SomeProperty" Value="{StaticResource BrushName}" /> </Style> </ResourceDictionary>

App.xaml

然后一些控件可能会使用这样的资源:

<Application ...>
  <Application.Resources>

    <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Brushes.xaml" />
        <ResourceDictionary Source="SomeStyles.xaml" />
      </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>


  </Application.Resources>
</Application ...>

更新

似乎发生在代码中创建的菜单和控件。它可以与那些不属于任何窗口可视树的控件和菜单相关吗?

2 个答案:

答案 0 :(得分:3)

您的SomeStyle.xaml字典需要直接引用Brushes.xaml字典,如下所示:

<ResourceDictionary ...>
  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="Brushes.xaml" />
  </ResourceDictionary.MergedDictionaries>
  <Style x:Key="SomeStyle">
    <Setter Property="SomeProperty" Value="{StaticResource BrushName}" />
  </Style>
</ResourceDictionary>

StaticResources只搜索当前字典的树,因此您需要传入它需要引用的任何资源。

答案 1 :(得分:0)

您是否在XAML标记扩展中使用DynamicResource?

你的xaml应该是{DynamicResource brushName}而不是{StaticResource brushName}