Tutorial de ASP.NET
Vista Previa de ASP.NET 2.0

Contenidos de un Tema y Skin

Cómo se ha mostrado en las secciones anteriores, un fichero de Skin contiene las definiciones de controles con los valores de las propiedades que aplicaremos a los controles del mismo tipo en una aplicación. Esta sección discute detalles adicionales sobre qué es contenido válido para añadir a un fichero de skin o de Tema.

Propiedades Tematizables

Las definiciones de controles en un fichero de skin sólo pueden contener valores para propiedades que están marcadas como Tematizables. Cada control define un conjunto de propiedades que podrían ser tematizadas mediante ThemeableAttribute en la propiedad. Añadiendo una propiedad que no es tematizable a un fichero de skin produce un error. Un control por si mismo puede ser excluido de un Tema, por ejemplo los controles de fuente de datos no son tematizables. Por defecto, la ID de la propiedad no se puede tematizar para ningún control. Todas las propiedades son tematizables por defecto a no ser que un control especifique lo contrario. Para comprobar si cierta propiedad es tematizable en un control, acudid a la documentación de referencia del Framework .NET.

Utilizando CSS en Temas

Una Hoja de Estilos en Cascada (CSS) puede ser añadido a un Tema colocándolo bajo el subdirectorio del Tema. La hoja de estilos CSS se aplicará a todas las páginas a las que apliquemos el tema, siempre que la página tenga un control <head runat="server"/> definido. Podemos nombrar el fichero CSS de cualquier forma siempre que tenga la extensión .css. Un Tema puede contener múltiples ficheros CSS. Cuando la página contiene referencias a los ficheros CSS (mediante una etiqueta <link rel="stylesheet" href="..."/> en el elemento <head/>), cualquier fichero CSS del Tema se aplicara despues de las hojas de estilo de la página.

C# Hojas de Estilo CSS Stylesheets en Temas


Utilizando Imágenes en Temas

Un tema también puede contener imágenes que se referencian en la definición del control en el fichero de skin. Las referencias a las imágenes en skins deben utilizar rutas relativas a la carpeta de las imágenes dentro del directorio Theme, de forma que las imágener y el fichero skin se puede mover juntas a otras aplicaciones de forma sencilla. En tiempo de ejecución, las rutas a las imágenes se revisan, de forma que las referencias son relativas al control dentro de la página objetivo, en lugar de al fichero skin. El siguiente ejemplo muestra un tema con un subdirectorio de imágenes.

C# Imágenes en Temas


Tematizando Grupos de Controles

La mayoría de las propiedades que establecemos en un skin serán propiedades de valor simple, como por ejemplo Font-Name, Width y BackColor. Sin embargo, también podemos crear un skin de propiedades de grupo. Haciendo ésto no aplicamos propiedades a los elementos en el grupo del control objetivo. En lugar de eso, reemplazamos el grupo en su totalidad al utilizar Temas y combinamos el grupo cuando utilizamos StyleSheetThemes. El siguiente ejemplo muestra el grupo Items de un control DropDownList definido en un fichero skin.

C# Tematizando Propiedades de Grupos



Ésto también es muy útil para ciertas propiedades de grupos que contienen grupos de estilos, como la propiedad LevelStyle del control TreeView o las propiedades LevelMenuItemStyles, LevelSubMenuItemStyles o LevelSelectedStyles del control Menu.

C# TreeView LevelStyles en un Tema


Tematizando Plantillas de Controles

también podemos aplicar propiedades de plantillas en un fichero skin. Igual que los grupos, definir una propiedad de plantilla en un fichero skin no tematiza los elementos individuales dentrol de la plantilla del control objetivo, sino que reemplaza todos los contenidos de la plantilla. Ésto es útil para cambiar de forma dramática el diseño de un control que sigue una plantilla mediante la aplicación de un Tema o un StyleSheetTheme.

C# Tematizando Propiedades de Plantillas


DataBindings y Expresiones

observad que el enlazado a datos mediante <%# Eval %> o <%# Bind %> también son válidas en una plantilla de tema, aunque los enlazados a datos en código arbitrario no están permitidos.

C# Data Bindings in Themes