2010-03-04 11 views
16

Estoy tratando de construir una aplicación wpf que permita al usuario cambiar el tema en tiempo de ejecución. Lo que he hecho hasta ahora es crear un recurso de recursos con todos los colores para la aplicación definida en él y luego estoy vinculando a este diccionario en el xaml.conmutando los diccionarios de recursos wpf en el tiempo de ejecución

A continuación se muestra el código que tengo para cambiar el diccionario de recursos:

if (System.IO.File.Exists(fileName)) 
{ 
    using (FileStream fs = new FileStream(fileName, FileMode.Open)) 
    { 
     ResourceDictionary dic = (ResourceDictionary)XamlReader.Load(fs); 
     Resources.MergedDictionaries.Clear(); 
     Resources.MergedDictionaries.Add(dic); 
    } 
} 

Este código funciona muy bien, y sé que está cambiando el diccionario de recursos, pero no actualiza los elementos ya mostrados en la pantalla . Mi pregunta es: ¿cómo puedo actualizar o volver a vincular la pantalla para tener en cuenta el nuevo diccionario de recursos?

gracias

sm

Respuesta

13

En mi caso, simplemente tenía que cambiar:

Resources.MergedDictionaries.Clear(); 
Resources.MergedDictionaries.Add(dic); 

a:

Application.Current.Resources.MergedDictionaries.Clear(); 
Application.Current.Resources.MergedDictionaries.Add(dic); 
Cuestiones relacionadas