ressources WPF ont fusionné pour Application.Resources mais pas résolu lors de l'exécution
-
23-09-2019 - |
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?
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