Compartir a través de


Extensión de marcado de recurso dinámico

Proporciona un valor para cualquier atributo de propiedad XAML aplazando ese valor como 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

Importancia Descripción
key La clave del recurso solicitado. Esta clave fue asignada inicialmente por la directiva x:Key si se creó un recurso en el marcado, o se proporcionó como el parámetro key al llamar a ResourceDictionary.Add si el recurso se creó en el código.

Observaciones

Un DynamicResource creará una expresión temporal durante la compilación inicial y, por 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á a partir de la búsqueda de claves en todos los diccionarios de recursos activos empezando desde el ámbito de la página actual y se reemplaza por la expresión correspondiente durante la compilación.

Importante

En términos de precedencia de propiedad de dependencia, una DynamicResource expresión es equivalente a la posición en la que se aplica la referencia de recursos dinámicos. Si establece un valor local para una propiedad que anteriormente tenía una DynamicResource expresión como valor local, DynamicResource se quitará por completo. Para más detalles, consulte Precedencia de valores de propiedad de dependencia.

Algunos escenarios de acceso a recursos son especialmente adecuados para DynamicResource más que para una extensión de marcado StaticResource. Consulta 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, consulta Recursos XAML.

Una clave de recurso puede ser cualquier cadena definida en la gramática XamlName. Una clave de recurso también puede ser otros tipos de objeto, como .Type Una Type clave 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.

Los medios declarativos alternativos de hacer referencia a un recurso son como una extensión de marcado StaticResource.

La sintaxis de atributo es la sintaxis más común que se usa con esta extensión de marcado. El token de cadena proporcionado después de asignar la cadena de identificador de DynamicResource como valor ResourceKey de la clase de extensión DynamicResourceExtension subyacente.

DynamicResource se puede usar en la sintaxis del elemento de objeto. En este caso, se requiere especificar el valor de la ResourceKey propiedad .

DynamicResource también se puede usar en un uso detallado de atributos que especifica la ResourceKey propiedad como un par property=value:

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

El uso detallado suele ser útil para las extensiones que tienen más de una propiedad configurable, o algunas propiedades opcionales. Dado que DynamicResource solo tiene una propiedad configurable, que es necesaria, no suele ser común un uso tan detallado.

En la implementación del procesador XAML de WPF, el manejo de esta extensión de marcado está definido por la clase DynamicResourceExtension.

DynamicResource es una extensión de marcado. Las extensiones de marcado normalmente se implementan cuando hay un requisito de escape de valores de atributo que no sean valores literales o nombres de controlador, y el requisito es más global que simplemente colocar convertidores de tipos en determinados tipos o propiedades. Todas las extensiones de marcado en XAML usan los caracteres { y } en su sintaxis de atributo, que es la convención por la que un procesador XAML reconoce que una extensión de marcado debe procesar el atributo. Para obtener más información, consulta Extensiones de marcado y XAML de WPF.

Consulte también