我有一个刷子,它是合并到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 ...>
更新
似乎发生在代码中创建的菜单和控件。它可以与那些不属于任何窗口可视树的控件和菜单相关吗?
答案 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}