2012-02-29 15 views
13

Tengo el siguiente conjunto de código en mi App.xaml:referencia a un recurso en un ResourceDictionary de un ResourceDictionary diferente en 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> 

El NavigationPanel.xaml contiene un estilo que se parece a esto:

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

el {StaticResource DarkBackground} se define en el archivo de Brushes.xaml (es decir, la primera r esource dictionary). Se define como

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

en el diccionario de recursos.

En tiempo de ejecución, me sale el siguiente error:

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

Los números de línea y la posición hace referencia al diccionario de recursosNavigationPanel.xaml en el App.xaml.

Puedo hacer referencia al pincel desde otros controles, pero no el diccionario de recursos incluido.

¿Por qué no puedo hacer referencia o por qué no resuelve la referencia a un recurso que está más arriba en la jerarquía del diccionario de recursos fusionados ?? ¿Que me estoy perdiendo aqui?

Respuesta

13

¿Está haciendo referencia al pincel DarkBackground en cualquiera de los recursos en el diccionario NavigationPanel?

Si necesita puede combinar el diccionario de recursos Brushes en el diccionario NavigationPanel.

En el diccionario NavigationPanel.

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

Esto funciona y entiendo por qué se resuelve ahora, pero ¿por qué no se resuelve cuando está en el diccionario de nivel superior? Estoy marcando tu respuesta como correcta, pero me encantaría una explicación si sabes por qué es así. –

+0

Encontré esto en otro hilo. Saliendo de aquí para la posteridad. 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 Gracias y crédito a Kamil Nieweglowski por esto. – Snouto

8

Puede incluir un diccionario en otro (como 'utilizar' en C#), así:

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

¿Es esto lo que busca? La plantilla del proyecto Cosmopolitan/Metro tiene un buen ejemplo de esto ...

Cuestiones relacionadas