ressources WPF ont fusionné pour Application.Resources mais pas résolu lors de l'exécution

StackOverflow https://stackoverflow.com/questions/2543726

Question

J'ai une brosse qui fait partie d'un ResourceDictionary qui est fusionné à Application.Resources.

Mais pour une raison quelconque, il est pas résolu lors de l'exécution quand un style est appliqué à l'un des contrôles. Cependant, si je l'appelle Application.Current.FindResource ( « BrushName ») de la fenêtre immédiate au moment où exception est levée, la ressource se trouve.

Est-ce que je manque quelque chose? N'est pas WPF censé essayer de chercher la ressource dans les ressources de l'application?

UPDATE L'application est assez grand, donc je ne peux pas poster tout le code réel mais voici la façon dont les ressources sont fusionnées et utilisées:

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

Et puis un certain contrôle peut utiliser le style en utilisant la ressource comme ceci:

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

UPDATE

Il semble se passer aux menus et aux contrôles qui sont créés dans le code. Peut-il être lié à ces contrôles et les menus l'exception des parties de l'arbre visuel de toute fenêtre?

Était-ce utile?

La solution

Votre dictionnaire SomeStyle.xaml doit directement faire référence dictionnaire Brushes.xaml, comme suit:

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

StaticResources recherche uniquement l'arbre du dictionnaire actuel, vous devez donc passer toutes les ressources dont il a besoin de faire référence.

Autres conseils

Utilisez-vous DynamicResource dans le XAML annoter l'extension?

Votre XAML devrait être {} DynamicResource brushName pas {} StaticResource brushName

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top