Extensión de marcado DynamicResource

Proporciona un valor para cualquier atributo de propiedad XAML aplazando ese valor para que sea una referencia a un recurso definido. El comportamiento de búsqueda de ese recurso es análogo a la búsqueda en tiempo de ejecución.

Uso de atributos XAML

<object property="{DynamicResource key}" ... />  

Uso de elementos de propiedad XAML

<object>  
  <object.property>  
    <DynamicResource ResourceKey="key" ... />  
  </object.property>  
</object>  

Valores XAML

Value Descripción
key Clave del recurso solicitado. Inicialmente, la directiva x:Key asignaba esta clave si se creaba un recurso en el marcado, o bien se proporcionaba como parámetro key al llamar a ResourceDictionary.Add si el recurso se creaba en el código.

Comentarios

Un DynamicResource creará una expresión temporal durante la compilación inicial y, por lo tanto, aplazará la búsqueda de recursos hasta que el valor del recurso solicitado sea realmente necesario para construir un objeto. Esto puede ser posiblemente después de cargar la página XAML. El valor del recurso se encontrará en función de la búsqueda de claves en todos los diccionarios de recursos activos a partir del ámbito de página actual y se sustituye por la expresión de marcador de posición de la compilación.

Importante

En términos de precedencia de propiedad de dependencia, una expresión DynamicResource es equivalente a la posición en la que se aplica la referencia de recursos dinámicos. Si se establece un valor local para una propiedad que previamente tenía una expresión DynamicResource como valor local, el DynamicResource se elimina completamente. Para obtener más información, consulte Prioridad de los valores de propiedades de dependencia.

Algunos escenarios de acceso a recursos son especialmente adecuados para DynamicResource en lugar de una extensión de marcado StaticResource. Consulte Recursos XAML para obtener una explicación sobre los méritos relativos y las implicaciones de rendimiento de DynamicResource y StaticResource.

El especificado ResourceKey debe corresponder a un recurso existente determinado por la directiva x:Key en algún nivel de la página, la aplicación, los temas de control disponibles y los recursos externos, o los recursos del sistema, y la búsqueda de recursos se producirá en ese orden. Para obtener más información sobre la búsqueda de recursos para recursos estáticos y dinámicos, consulte Recursos XAML.

Una clave de recurso puede ser cualquier cadena que se defina con la gramática XamlName. Una clave de recurso también puede ser otros tipos de objeto, como Type. Una clave Type es fundamental para cómo se pueden aplicar estilos a los controles por temas. Para obtener más información, consulte Información general sobre la creación de controles.

Las API para la búsqueda de valores de recursos, como FindResource, siguen la misma lógica de búsqueda de recursos que usa DynamicResource.

El medio declarativo alternativo para hacer referencia a un recurso es como una extensión de marcado StaticResource.

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 DynamicResource se asigna como valor de ResourceKey de la clase de extensión DynamicResourceExtension subyacente.

DynamicResource se puede usar en la sintaxis de elementos de objeto. En este caso, es necesario especificar el valor de la propiedad ResourceKey.

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

<object property="{DynamicResource ResourceKey=key}" ... />  

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 DynamicResource tiene una sola propiedad configurable, que es obligatoria, este uso detallado no es habitual.

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

DynamicResource 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.

Vea también