Ресурс WPF объединен с Application.Resources, но не разрешен во время выполнения - PullRequest
3 голосов
/ 30 марта 2010

У меня есть кисть, которая является частью ResourceDictionary, которая объединена с Application.Resources.

Но по какой-то причине он не разрешается во время выполнения, когда к одному из элементов управления применяется стиль. Тем не менее, если я вызываю Application.Current.FindResource ("BrushName") из непосредственного окна во время возникновения исключения, ресурс найден.

Я что-то упустил? Разве WPF не должен пытаться искать ресурс в ресурсах приложения?

UPDATE Приложение довольно большое, поэтому я не могу опубликовать весь реальный код, но вот как ресурсы объединяются и используются:

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

UPDATE

Кажется, это происходит с меню и элементами управления, которые создаются в коде. Может ли это быть связано с тем, что эти элементы управления и меню не являются частями визуального дерева какого-либо окна?

Ответы [ 2 ]

3 голосов
/ 30 августа 2011

Ваш словарь 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 выполняет поиск только в дереве текущего словаря, поэтому вам нужно передать любые ресурсы, на которые он должен ссылаться.

0 голосов
/ 30 марта 2010

Используете ли вы DynamicResource в расширении разметки XAML?

Ваш xaml должен быть {DynamicResource brushName}, а не {StaticResource brushName}

...