2009-07-22 27 views
30

Cada vez que se crea una nueva aplicación de WPF o la biblioteca de control de usuario de WPF, el archivo AssemblyInfo.cs incluye los siguientes atributos:¿Para qué es el atributo ThemeInfo?

[assembly: ThemeInfo(
    ResourceDictionaryLocation.None, 
    //where theme specific resource dictionaries are located 
    //(used if a resource is not found in the page, 
    // or application resource dictionaries) 
    ResourceDictionaryLocation.SourceAssembly 
    //where the generic resource dictionary is located 
    //(used if a resource is not found in the page, 
    // app, or any theme specific resource dictionaries) 
)] 

¿Qué es este atributo para ThemeInfo? ¿Rompo algo si lo elimino?

+1

Hombre, estoy contento de haber tropezado con esto! Estaba obteniendo una ventana en blanco/negro debido a una BaseView personalizada que había construido y luego movido a otro proyecto. ¡Agregar esto lo solucionó! – Heliac

Respuesta

16

El atributo ThemeInfo especifica dónde el mecanismo de tematización automático debe buscar los diccionarios de temas y el diccionario genérico. Cada opción se puede establecer en uno de los siguientes valores:

  • Ninguno (predeterminado): No busque un diccionario de recursos.
  • SourceAssembly: el diccionario es el ensamblado actual.
  • ExternalAssembly: el diccionario está en un ensamblaje diferente, que debe llamarse <AssemblyName>.<ThemeName>.dll, donde <AssemblyName> es el nombre del ensamblaje actual.

Si los diccionarios temáticos especificar estilos para los controles que se definen en montajes externos, por ejemplo, el WPF controles tales como System.Windows.Controls.ProgressBar y System.Windows.Button, entonces debe utilizar el ThemeDictionaryExtension para especificar la aplicación como la fuente para los diccionarios temáticos .

+4

Pero, ¿qué significa eso? ¿Qué es un "diccionario de temas"? ¿Qué es un "diccionario genérico"? ¿Para qué son? ¿Son importantes? Y, como pregunté en mi pregunta, ¿romperé algo si elimino el atributo? –

+0

Como sé que eliminará que sus controles no tomarán el tema de generic.xaml, dice dónde buscar el tema genérico –

+1

¡Gracias! Me he vuelto loco tratando de aplicar estilos basados ​​en temas a los controles definidos externamente. No tenía idea de 'ThemeDictionaryExtension'. Una vez que agregué eso, ¡todo funcionó FINALMENTE! ¡¡Gracias de nuevo!! –

5

El marco WPF utiliza este atributo en las bibliotecas de control como una forma conveniente de aplicar recursos a los controles.

Considere que Windows se puede ejecutar con diferentes temas de interfaz de usuario (Aero es uno de esos ejemplos). Los controles de WPF proporcionados por Microsoft alteran su apariencia para diferentes temas de entorno.

Si su aplicación requiere este comportamiento, puede crear diferentes diccionarios de temas en la carpeta themes de su proyecto de biblioteca de control.

Incluso si no necesita compatibilidad multitem, es conveniente poner recursos en el archivo generic.xaml para que sean accesibles a los controles en el ensamblado. Tal vez su elemento (control) esté definido en un archivo .cs sin una clase parcial .xaml, y necesita algún lugar para almacenar los recursos que necesita, o (más probablemente) tiene recursos que serán compartidos entre muchos elementos WPF en el mismo proyecto/montaje.

El atributo al que se refiere aquí es metadatos para el mapeo de estos recursos.

+0

Entonces, ¿no necesito el atributo si estoy usando controles estándar y seleccionables como Botón? Solo lo necesitaría si: (a) estaba escribiendo mis propios controles desde cero que necesitaban verse diferentes en Aero vs Luna, etc., o (b) mi ensamblado tenía un archivo generic.xaml? Y en cualquiera de esos casos, los valores predeterminados no funcionarán y necesito el atributo? –

+0

Sí, estás en el camino correcto aquí, pero como estamos hablando de tus propios controles, no hay ningún recurso "predeterminado". Los únicos valores predeterminados que podría haber llegado a través del archivo 'generic.xaml'. Los recursos en ese diccionario se reemplazan por las entradas de diccionario de recursos específicas del tema, si existen. –

Cuestiones relacionadas