2012-02-29 9 views
13

Ho la seguente serie di codice nel mio App.xaml:Riferimento a una risorsa in un ResourceDictionary da un ResourceDictionary diversa in Silverlight

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/Client.Common;component/Theme/Brushes.xaml"/> 
      <ResourceDictionary Source="/Client.Common;component/Theme/Fonts.xaml"/> 
      <ResourceDictionary Source="/Client.Common;component/Theme/CoreStyles.xaml"/> 
      <ResourceDictionary Source="/Client.Common;component/Theme/SdkStyles.xaml"/> 
      <ResourceDictionary Source="/Client.Common;component/Theme/MyAppName.xaml"/> 

      <ResourceDictionary Source="/Client.Common;component/Controls/NavigationPanel.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

Il NavigationPanel.xaml contiene uno stile che assomiglia a questo:

<Style x:Key="NavigationPanelListBox" TargetType="ListBox"> 
    <Setter Property="Background" Value="{StaticResource DarkBackground}" /> 
    <Lots of XAML> 
</Style> 

il {StaticResource DarkBackground} è definita nel file di Brushes.xaml (cioè il primo r dizionario esource). È definito come

<SolidColorBrush x:Key="DarkBackground" Color="#FF707176" /> 

nel dizionario risorse.

In fase di esecuzione, ottengo il seguente errore:

Cannot find a Resource with the Name/Key DarkBackground [Line: 16 Position: 44] 

I numeri di riga e la posizione fa riferimento al dizionario risorsa NavigationPanel.xaml nel App.xaml.

Posso fare riferimento al pennello da altri controlli, ma non al dizionario delle risorse incluso.

Perché non posso fare riferimento o perché non risolve il riferimento a una risorsa che è più in alto nella gerarchia del dizionario delle risorse unite ?? Cosa mi manca qui?

risposta

13

Si sta facendo riferimento al pennello DarkBackground in una qualsiasi delle risorse nel dizionario NavigationPanel?

Se è possibile che si debba unire il dizionario di risorse Brushes nel dizionario NavigationPanel.

Quindi nel dizionario NavigationPanel.

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="/Client.Common;component/Theme/Brushes.xaml" /> 
</ResourceDictionary.MergedDictionaries> 
+1

Questo funziona e capisco perché si risolve ora ma perché non si risolve quando si trova nel dizionario di livello superiore? Segnalo la tua risposta come corretta, ma mi piacerebbe una spiegazione se sai perché è così. –

+0

Trovato in un'altra discussione. Lasciando qui per i posteri. https://social.msdn.microsoft.com/forums/windowsapps/en-US/2be9a5f6-5313-448d-a9d9-296bac42215e/using-style-defined-in-merged-dictionary-from-another-merged-dictionary? forum = wpdevelop Grazie e credito a Kamil Nieweglowski per questo. – Snouto

8

è possibile includere un dizionario in un altro (come 'utilizzando' in C#) in questo modo:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation" 
    xmlns:uriMapper="clr-namespace:System.Windows.Navigation;assembly=System.Windows.Controls.Navigation" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:Controls="clr-namespace:APC.IKM.UI.SL.Controls" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> 

    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="Brushes.xaml"/> 
     <ResourceDictionary Source="Fonts.xaml"/> 
     <ResourceDictionary Source="CoreStyles.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 

E 'questo quello che stai cercando? Il modello di progetto Cosmopolitan/Metro ha un buon esempio di questo ...

Problemi correlati