3

我有一个画笔,ResourceDictionary它是合并到Application.Resources.

但是由于某种原因,当样式应用于其中一个控件时,它不会在运行时解决。但是,如果我在引发异常时从即时窗口调用 Application.Current.FindResource("BrushName") ,则会找到资源。

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

更新 应用程序很大,所以我不能发布所有实际代码,但这是资源合并和使用的方式:

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 ...>

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

...
Style={StaticResource SomeStyle}
...

更新

它似乎发生在用代码创建的菜单和控件上。它是否与那些不属于任何窗口的可视化树的控件和菜单有关?

4

2 回答 2

2

您的 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 仅向上搜索当前字典的树,因此您需要传入它需要引用的任何资源。

于 2011-08-30T11:22:52.857 回答
0

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

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

于 2010-03-30T08:28:11.520 回答