Extensión de marcado ThemeDictionaryThemeDictionary Markup Extension

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.Provides a way for custom control authors or applications that integrate third-party controls to load theme-specific resource dictionaries to use in styling the control.

Uso de atributos XAMLXAML Attribute Usage

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

Uso de elementos de objeto XAMLXAML Object Element Usage

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

Valores XAMLXAML Values

assemblyUri Identificador uniforme de recursos (URI) del ensamblado que contiene información del tema.The uniform resource identifier (URI) of the assembly that contains theme information. Normalmente, se trata de un Pack URI que hace referencia a un ensamblado en el paquete mayor.Typically, this is a pack URI that references an assembly in the larger package. Los recursos de ensamblado y los Pack URI simplifican los problemas de implementación.Assembly resources and pack URIs simplify deployment issues. Para más información, vea Empaquetar URI en WPF.For more information see Pack URIs in WPF.

ComentariosRemarks

Esta extensión está pensada para rellenar solo un valor de propiedad concreto: un valor para ResourceDictionary.Source.This extension is intended to fill only one specific property value: a value for ResourceDictionary.Source.

Mediante esta extensión, puede especificar un solo ensamblado de solo recursos que contenga algunos estilos para usar solo cuando el tema de Windows Aero se aplique al sistema del usuario, a otros estilos solo cuando el tema Luna esté activo, etc.By using this extension, you can specify a single resources-only assembly that contains some styles to use only when the Windows Aero theme is applied to the user's system, other styles only when the Luna theme is active, and so on. 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.By using this extension, the contents of a control-specific resource dictionary can be automatically invalidated and reloaded to be specific for another theme when required.

La assemblyUri cadena (valor de propiedadAssemblyName) constituye la base de una Convención de nomenclatura que identifica qué diccionario se aplica a un tema determinado.The assemblyUri string (AssemblyName property value) forms the basis of a naming convention that identifies which dictionary applies for a particular theme. La lógica de ProvideValue para ThemeDictionary completa la Convención mediante la generación de un identificador uniforme de recursos (URI) que señala a una variante determinada del Diccionario de temas, como se encuentra dentro de un ensamblado de recursos precompilado.The ProvideValue logic for ThemeDictionary completes the convention by generating a uniform resource identifier (URI) that points to a particular theme dictionary variant, as contained within a precompiled resource assembly. 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.Describing this convention, or theme interactions with general control styling and page/application level styling as a concept, is not covered fully here. El escenario básico para utilizar ThemeDictionary es especificar la propiedad Source de una ResourceDictionary declarada en el nivel de la aplicación.The basic scenario for using ThemeDictionary is to specify the Source property of a ResourceDictionary declared at the application level. Cuando se proporciona un URI para el ensamblado a través de una extensión de ThemeDictionary en lugar de un URI directo, la lógica de la extensión proporcionará lógica de invalidación que se aplica cada vez que cambia el tema del sistema.When you provide a URI for the assembly through a ThemeDictionary extension rather than as a direct URI, the extension logic will provide invalidation logic that applies whenever the system theme changes.

La sintaxis de atributo es la que se usa normalmente con esta extensión de marcado.Attribute syntax is the most common syntax used with this markup extension. 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.The string token provided after the ThemeDictionary identifier string is assigned as the AssemblyName value of the underlying ThemeDictionaryExtension extension class.

ThemeDictionary también se puede usar en la sintaxis de elementos de objeto.ThemeDictionary may also be used in object element syntax. En este caso, es necesario especificar el valor de la propiedad AssemblyName.In this case, specifying the value of the AssemblyName property is required.

ThemeDictionary también se puede utilizar en el uso de atributos detallado que especifica la propiedad Member como un par de propiedad=valor:ThemeDictionary can also be used in a verbose attribute usage that specifies the Member property as a property=value pair:

<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.The verbose usage is often useful for extensions that have more than one settable property, or if some properties are optional. Dado que ThemeDictionary tiene una sola propiedad configurable, que es obligatoria, este uso detallado no es habitual.Because ThemeDictionary has only one settable property, which is required, this verbose usage is not typical.

En la implementación del procesador de WPFWPF XAMLXAML, el control de esta extensión de marcado se define mediante la clase ThemeDictionaryExtension.In the WPFWPF XAMLXAML processor implementation, the handling for this markup extension is defined by the ThemeDictionaryExtension class.

ThemeDictionary es una extensión de marcado.ThemeDictionary is a markup extension. 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.Markup extensions are typically implemented when there is a requirement to escape attribute values to be other than literal values or handler names, and the requirement is more global than just putting type converters on certain types or properties. Todas las extensiones de marcado de XAMLXAML usan los caracteres { y } en su sintaxis de atributo, que es la convención que permite que un procesador de XAMLXAML reconozca que el atributo se debe procesar mediante una extensión de marcado.All markup extensions in XAMLXAML use the { and } characters in their attribute syntax, which is the convention by which a XAMLXAML processor recognizes that a markup extension must process the attribute. Para más información, vea Extensiones de marcado y XAML de WPF.For more information, see Markup Extensions and WPF XAML.

Vea tambiénSee also