risorsa WPF fusi per Application.Resources ma non risolto in fase di esecuzione
-
23-09-2019 - |
Domanda
Ho un pennello che fa parte di un ResourceDictionary
che viene fusa a Application.Resources
.
Ma per qualche motivo non è risolto in fase di esecuzione quando uno stile viene applicato ad uno dei controlli. Tuttavia, se chiamo Application.Current.FindResource ( "BrushName") dalla finestra immediata al momento in cui viene lanciata un'eccezione, la risorsa è stata trovata.
Mi sto perdendo qualcosa? non dovrebbe WPF per provare a cercare la risorsa delle risorse del app?
Aggiorna L'applicazione è abbastanza grande, quindi non posso postare tutto il codice vero e proprio, ma qui è il modo in cui le risorse vengono uniti e utilizzati:
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 ...>
E poi un certo controllo potrebbe utilizzare lo stile utilizzando la risorsa in questo modo:
...
Style={StaticResource SomeStyle}
...
Aggiorna
Sembra accadere ai menu e ai controlli che vengono creati nel codice. Può essere collegato a tale controllo e non i menu che sono parti di struttura ad albero visuale di ogni finestra?
Soluzione
Il dizionario SomeStyle.xaml deve fare riferimento direttamente dizionario Brushes.xaml, in questo modo:
<ResourceDictionary ...>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Brushes.xaml" />
</ResourceDictionary.MergedDictionaries>
<Style x:Key="SomeStyle">
<Setter Property="SomeProperty" Value="{StaticResource BrushName}" />
</Style>
</ResourceDictionary>
StaticResources cercare solo l'albero del dizionario corrente, quindi è necessario passare a tutte le risorse di cui ha bisogno per fare riferimento.
Altri suggerimenti
Stai usando DynamicResource in XAML annotare estensione?
Il tuo XAML dovrebbe essere {DynamicResource brushName} {non StaticResource brushName}