Pregunta

Estoy tratando de desarrollar una forma de cambiar el estilo de aplicaciones de Windows Phone 7 en función de un ajuste. Los estilos se parecen a esto:

  • estilos de núcleo se separan y definen en WP7Style_Dark.xaml y WP7Style_Light.xaml
  • el resto de los estilos se declaran en Styles.xaml

Yo uso el siguiente código para conectar los temas en App.xaml.cs:

var dictionaries = Resources.MergedDictionaries;
dictionaries.Clear();
string source = String.Format("/CommonUI;component/Resources/{0}.xaml", value == AppStyleSet.Light ? "WP7Style_Light" : "WP7Style_Dark");
//base styles
var themeStyles = new ResourceDictionary {Source = new Uri(source, UriKind.Relative)};
dictionaries.Add(themeStyles);
var generalStyles = new ResourceDictionary();
generalStyles.Source = new Uri("/CommonUI;component/Resources/Styles.xaml",UriKind.Relative);
dictionaries.Add(generalStyles);

Cuando se ejecuta, el establecimiento de generalStyles.Source produce una excepción (que es un System.Exception que indica 'Error no especificado'). He descubierto la excepción desaparece si me vacío del Styles.xaml, pero esto no es una solución, por supuesto.

¿Qué debo hacer?

Actualización 2: atornillar el seguimiento de la pila, aquí está el problema redujo:

Los estilos de tema definen los colores del tema. Los estilos generales mantienen bien la carga hasta que se encuentran una unión, como éste

... <Setter Property="Color" Value="{StaticResource HighlightColor}" />

Por lo tanto, la StaticResource deja de ser resuelto y produce la excepción. Se puede evitar de alguna manera?

¿Fue útil?

Solución

El problema que he encontrado con este enfoque es que no parece haber una cierta asincronía acerca de cómo los recursos del diccionario se autocarga de la URL en la propiedad Source. De ahí que cuando uno usa diccionario {StaticResource key} donde key se encuentra en un diccionario anterior se puede fallar.

Una solución solución sería la de extraer el Xaml usando Application.GetResourceStream y StreamReader. Luego de usar XamlReader para construir el ResourceDictionary. De esa manera usted puede estar seguro de que los diccionarios dependientes pueden encontrar recursos estáticos que necesitan.

Tenga en cuenta que se necesita para asegurarse de que haya añadido en cada diccionario para que sea parte del árbol Application.Resources antes diccionarios dependientes adicionales de carga.

Otros consejos

WP7 está basada en Silverlight 3+ y por defecto no es posible crear un nuevo diccionario de recursos en el código, por lo que usted está recibiendo un System.Exception que se expresará una "UnspecifiedError".

La solución, simple crear un ResourceDictionary como si estuviera usando Silverlight3 - seguir este tutorial .

Espero que esto resuelve el problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top