2011-04-14 24 views
5

¿Es posible crear un tema personalizado y usarlo como tema predeterminado?Tema personalizado que anula el tema predeterminado WP7

Cada ejemplo que puedo encontrar en cualquier lugar dice que puede crear temas personalizados copiando los archivos ThemeResources.xaml y System.Windows.xaml y los incluye como diccionarios fusionados en su aplicación.

http://windowsphonegeek.com/articles/Creating-WP7-Custom-Theme-ndash-Basic-Theme-Implementation Overriding themes in Windows Phone 7

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Resources/CustomThemeResources.xaml" /> 
      <ResourceDictionary Source="Resources/CustomThemeStyles.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

Luego he leído un poco más que es necesario incluir los cepillos en el interior el archivo de estilos, por lo que en CustomThemeStyles.xaml tengo esto.

http://www.windowsphonegeek.com/articles/Creating-WP7-Custom-Theme---Complex-Theme

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="CustomThemeResources.xaml" /> 
</ResourceDictionary.MergedDictionaries> 

No funciona ... así que descargar la aplicación de la muestra y, efectivamente, cada página que quiere tener un poco de color cambió, al igual que el color de fondo, se puso sobre su componente más externo.

<Grid Background="{StaticResource PhoneBackgroundBrush}"> 
... 
</Grid> 

¿Es posible incluir temas personalizados que cambiar el estilo/cepillos/colores/etc de todos los valores predeterminados sin tener que establecer explícitamente en todas partes?

Respuesta

4

No es posible en la versión actual de WP7 para tener un nuevo estilo que cambia el predeterminado sin explícitamente establece que a través de "x: Key":

Estilos implícitas son una característica de Silverlight 4 (y WPF): Windows Phone 7 está basado en Silverlight 3+ (con algunas características de Silverlight 4 agregadas). Como no hay estilos implícitos en Silverlight 3, esto significa que tampoco hay forma de usarlos en Windows Phone 7.

Por ahora se puede:

  1. alteran temporalmente la Cepillos/recursos predeterminados Colores como se explica en el primer artículo que usted ha señalado. Tenga en cuenta que todos los controles WP7 cambiarán sus colores. Tenga en cuenta también que, por alguna razón, el fondo predeterminado permanece sin cambios. Este es un problema conocido con la versión actual de WP7 y probablemente se solucionará en la actualización de "Mango".

  2. Si desea tener cualquier estilo nuevo/plantilla de control, debe utilizar el enfoque "x: Key"/{StaticResource ...} como se menciona en el segundo artículo que ha señalado.

Por último, como Derek Lakin se mencionó anteriormente: esperemos que este error irá instalada en la actualización de Mango!

+0

Tengo un estilo/tema que deseo aplicar en todo momento, independientemente de si es un tema claro u oscuro. ¿Es la mejor manera de simplemente ir a través del archivo 'ThemeResources.xaml' copiado y cambiar todo, luego establecer explícitamente las cosas que no se establecen como el fondo? ¿O hay muchas cosas que no se establecerán implícitamente al usar el tema combinado? –

1

Si crea un diccionario de recursos y lo llama algo así como Reset.xaml que contiene todos los recursos de pincel estándar. Coloque cualquier estilo/pinceles de recursos personalizados en otro diccionario de recursos (lo llamaremos Custom.xaml por el momento). En App.xaml incluir estos dos diccionarios de recursos, como se muestra aquí:

<Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Resources/Reset.xaml"/> 
       <ResourceDictionary Source="Resources/Custom.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 

En teoría, esto debería ser suficiente, pero por desgracia no lo es. Por alguna razón (es de esperar un error que va a quedar fijo en la actualización de Mango) también es necesario incluir el Reset.xaml en el Custom.xaml así:

<ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="Reset.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 

Una vez hecho esto, que debería ser eso; no deberías necesitar hacer otra cosa.

1

Con el lanzamiento de Windows Phone Mango (7.1), la función de fusionar estilos de diccionario XAML ya no funciona. En la actualidad, tendrá que cambiar la entrada de color Brush del recurso de la aplicación en el código subyacente; preferiblemente en el constructor de App() en App.xaml.cs.

Ejemplo:

  (App.Current.Resources["PhoneAccentBrush"] as SolidColorBrush).Color = Color.FromArgb(12, 12, 54, 145); 
      (App.Current.Resources["PhoneForegroundBrush"] as SolidColorBrush).Color = Colors.Green; 
      (App.Current.Resources["PhoneBackgroundBrush"] as SolidColorBrush).Color = Colors.Purple; 

Esperemos que en el SDK WP8 ya no necesitaremos hacer esta solución.

Cuestiones relacionadas