Extensión de marcado ThemeDictionary

Proporciona a los autores de controles personalizados o a las aplicaciones que integran controles de otros fabricantes una manera de cargar los diccionarios de recursos específicos del tema para usarlos en la aplicación de estilos al control.

Uso de atributos XAML

<object property="{ThemeDictionary assemblyUri}" ... />  

Uso de elementos de objeto XAML

<object>  
  <object.property>  
    <ThemeDictionary AssemblyName="assemblyUri"/>  
  <object.property>  
<object>  

Valores XAML

Value Descripción
assemblyUri El identificador uniforme de recursos (URI) del ensamblado que contiene información del tema. Normalmente, se trata de un Pack URI que hace referencia a un ensamblado en el paquete mayor. Los recursos de ensamblado y los Pack URI simplifican los problemas de implementación. Para más información, vea Empaquetar URI en WPF.

Comentarios

Esta extensión esta diseñada para rellenar un solo valor de propiedad específico: un valor para ResourceDictionary.Source.

Mediante esta extensión, puede especificar un único ensamblado solo de recursos que contenga algunos estilos para usarlos solamente cuando se aplique el tema Windows Aero al sistema del usuario, otros estilos solo cuando esté activo el tema Luna, y así sucesivamente. Al usar esta extensión, se puede invalidar automáticamente y volver a cargar el contenido de un diccionario de recursos específico del control de modo que sea específico de otro tema cuando se necesite.

La cadena assemblyUri (valor de propiedad AssemblyName) constituye la base de una convención de nomenclatura que identifica qué diccionario se aplica para un tema concreto. La lógica de ProvideValue para ThemeDictionary completa la convención generando un identificador uniforme de recursos (URI) que señala a una variante concreta del diccionario del tema, contenida dentro de un ensamblado de recursos precompilado. En este artículo no se aborda plenamente la descripción de esta convención, ni el concepto de las interacciones de los temas con la aplicación general de estilos a controles o en el nivel de aplicación o de página. El escenario básico para usar ThemeDictionary consiste en especificar la propiedad Source de un objeto ResourceDictionary declarado en el nivel de la aplicación. Cuando se proporciona un URI para el ensamblado mediante una extensión de ThemeDictionary en lugar de usar un URI directo, la lógica de la extensión proporciona la lógica de invalidación que se aplica cada vez que cambia el tema del sistema.

La sintaxis de atributo es la que se usa normalmente con esta extensión de marcado. El token de cadena que se proporciona después de la cadena de identificador ThemeDictionary se asigna como valor de AssemblyName de la clase de extensión ThemeDictionaryExtension subyacente.

ThemeDictionary también se puede usar en la sintaxis de elementos de objeto. En este caso, es necesario especificar el valor de la propiedad AssemblyName.

ThemeDictionary también se puede utilizar en el uso de atributos detallado que especifica la propiedad Member como un par de propiedad=valor:

<object property="{ThemeDictionary AssemblyName=assemblyUri}" ... />  

El uso detallado suele ser útil para las extensiones que tienen más de una propiedad que se puede configurar, o en aquellos casos en que algunas propiedades son opcionales. Dado que ThemeDictionary tiene una sola propiedad configurable, que es obligatoria, este uso detallado no es habitual.

La clase ThemeDictionaryExtension define el control para esta extensión de marcado en la implementación del procesador XAML de WPF.

ThemeDictionary es una extensión de marcado. Las extensiones de marcado se suelen implementar cuando se necesita que los valores de los atributos de escape no sean valores literales o nombres de controladores, y este requisito es de índole más global que limitarse a colocar los convertidores de tipos en determinados tipos o propiedades. Todas las extensiones de marcado de XAML utilizan los caracteres { y } en su sintaxis de atributo, que es la convención que permite que un procesador de XAML reconozca que el atributo se debe procesar mediante una extensión de marcado. Para más información, vea Extensiones de marcado y XAML de WPF.

Consulte también