He desarrollado una aplicación que permite al usuario cambiar de tema. Estoy haciendo esto mediante la inclusión del archivo XAML como un recurso en mi proyecto y utilizando el siguiente código:Usar un diccionario de recursos como tema en Silverlight
MainTheme.ThemeUri = new Uri("SilverlightApplication1;component/Themes/[ThemeName]/Theme.xaml", UriKind.Relative);
Esto funcionó bien, hasta que me encontró estos temas: http://timheuer.com/blog/archive/2010/05/17/silverlight-4-tools-released-and-new-application-templates.aspx
La diferencia es que estos temas consta de múltiples archivos. Así que hice un archivo Theme.xaml que solo incluye MergedDictionaries, así que aún podía usar el código anterior. Este es el archivo Theme.xaml para el tema Cosmopolitan.
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="CoreStyles.xaml"/>
<ResourceDictionary Source="SDKStyles.xaml"/>
<ResourceDictionary Source="Styles.xaml"/>
<ResourceDictionary Source="ToolkitStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
Sin embargo, cuando ejecuto el código C# anterior me sale el siguiente excepción:
System.Windows.Markup.XamlParseException: Failed to assign to property 'System.Windows.ResourceDictionary.Source'.
Para que quede claro, utilizando el método MergedDictionaries funciona cuando me puse en mi App.xaml:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Themes/Cosmopolitan/Theme.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
¿Qué estoy haciendo mal?
Gracias!
Definición de rutas absolutas en mi archivo Theme.xaml también no funciona :( – SaphuA
tuve un problema similar y la causa fue utilizar una barra diagonal inversa (\) en lugar de barra inclinada (/) al hacer referencia al archivo. El analizador xaml en VS pudo resolver la ubicación, pero en tiempo de ejecución se generó un error. Esperamos que esto ayude a otra persona –