Tengo una biblioteca, CommonLibraryWpfThemes, con varios archivos XAML del diccionario de recursos. El archivo My Themes/Generic.xml contiene una declaración ResourceDictionary.MergedDictionaries que combina todos los demás archivos.Problemas al hacer referencia a un diccionario de recursos que contiene un diccionario combinado
Generic.xaml
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/BrushDictionary.xaml" />
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/TextBlockDictionary.xaml" />
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/LabelDictionary.xaml" />
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/ButtonDictionary.xaml" />
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/WindowDictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
En mi proyecto de aplicación, que tienen una referencia a CommonLibraryWpfThemes, y la referencia explícita Generic.xml en mi archivo App.xaml.
App.xaml - FALLA
<Application
x:Class="MyApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/Themes/Generic.xaml" />
</Application.Resources>
</Application>
Esto no funciona. Me sale el siguiente error cuando ejecuto mi aplicación:
System.Windows.Markup.XamlParseException occurred
Message="Cannot find resource named '{_fadedOrangeBrush}'. Resource names are case sensitive. Error at object 'System.Windows.Setter' in markup file 'CommonLibraryWpfThemes;component/ResourceDictionaries/WindowDictionary.xaml' Line 18 Position 13."
Source="PresentationFramework"
LineNumber=18
LinePosition=13
Si coloco el contenido de Generic.xaml en App.xaml directamente, todo funciona bien:
App.xaml - tiene éxito
<Application
x:Class="MyApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/BrushDictionary.xaml" />
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/TextBlockDictionary.xaml" />
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/LabelDictionary.xaml" />
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/ButtonDictionary.xaml" />
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/WindowDictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
Tal vez voy sobre esto en el camino equivocado. Mi objetivo es facilitar la referencia de todos los recursos de mi tema desde múltiples aplicaciones sin tener que enumerar todos los archivos individuales. ¿Hay una manera recomendada de hacer esto? (Nota: no estoy tratando de cambiar entre varios temas, solo tengo un tema.)
Como beneficio adicional, sería bueno si alguien pudiera decirme cómo hacer referencia a recursos en una biblioteca externa sin romper el diseñador en Visual Studio.
Gracias.
EDIT:
Intenté envolver el ResourceDictionary en un elemento de ResourceDictionary.MergedDictionary, sino que también no funcionaba (me da el mismo error):
<Application
x:Class="MyApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/Themes/Generic.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
Comenzaré una pequeña recompensa aquí. Combinar algunos RessourceDictionaries en un tema (y simplemente cargar esto en App.xaml) parece un escenario bastante común ... – Jens