Atributo x:Shared
Cuando se establece en false
, modifica el comportamiento de recuperación de recursos de WPF para que el recurso con atributos creen una nueva instancia para cada solicitud en lugar de compartir la misma instancia para todas las solicitudes.
Uso de atributos XAML
<ResourceDictionary>
<object x:Shared="false".../>
</ResourceDictionary>
Comentarios
x:Shared
se asigna al espacio de nombres XAML del lenguaje XAML y se reconoce como un elemento de lenguaje XAML válido por los servicios XAML de .NET y sus lectores XAML. Sin embargo, las funcionalidades indicadas de x:Shared
solo son relevantes para las aplicaciones WPF y para el analizador XAML de WPF. En WPF x:Shared
solo es útil como atributo cuando se aplica a un objeto que existe dentro de un ResourceDictionary de WPF. Otros usos no producen excepciones de análisis u otros errores, pero no tienen ningún efecto.
El significado de x:Shared
no se especifica en la especificación del lenguaje XAML. Otras implementaciones XAML, como las que se basan en servicios XAML de .NET, no proporcionan necesariamente compatibilidad con el uso compartido de recursos. Estas implementaciones XAML podían proporcionar un comportamiento similar en el marco auxiliar que también usaba valores x:Shared
.
En WPF la condición predeterminada x:Shared
para los recursos es true
. Esta condición significa que cualquier solicitud de recurso determinada siempre devuelve la misma instancia.
Modificar un objeto que se devuelve a través de una API de recursos, como FindResource o modificar un objeto directamente dentro de un ResourceDictionary, cambia el recurso original. Si las referencias a ese recurso fueran referencias de recursos dinámicos, los consumidores de ese recurso obtendrían el recurso cambiado.
Si las referencias al recurso eran referencias de recursos estáticos, los cambios en el recurso después del tiempo de procesamiento XAML son irrelevantes. Para obtener más información sobre la comparación entre las referencias de recursos estáticos y dinámicos, vea Información general sobre los recursos XAML (WPF .NET).
La especificación explícita de x:Shared="true"
se realiza raras veces, ya que ya es el valor predeterminado. No hay ningún código directo equivalente para x:Shared
en el modelo de objetos de WPF; solo se puede especificar en un uso XAML y debe procesarse por el comportamiento predeterminado de WPF o en un flujo de nodo XAML intermedio en la ruta de acceso de carga si se procesa mediante servicios XAML de .NET y sus lectores XAML.
Un escenario para x:Shared="false"
es si define una clase derivada FrameworkElement o FrameworkContentElement como un recurso y, a continuación, introduce el recurso de elemento en un modelo de contenido. x:Shared="false"
permite que un recurso de elemento se introduzca varias veces en la misma colección (por ejemplo, UIElementCollection). Esto no es válido sin x:Shared="false"
, porque la colección aplica la unicidad de su contenido. Sin embargo, el comportamiento de x:Shared="false"
crea otra instancia idéntica del recurso en lugar de devolver la misma instancia.
Otro escenario para x:Shared="false"
es si usa un recurso Freezable para los valores de animación, pero desea modificar el recurso por animación.
El control de cadenas de false
no distingue entre mayúsculas minúsculas.
En WPF x:Shared
solo es válido en las condiciones siguientes:
El ResourceDictionary que contiene los elementos con
x:Shared
debe estar compilado. El ResourceDictionary no puede estar dentro de XAML dinámico ni ser usado por temas.El ResourceDictionary que contiene los elementos no debe estar anidado dentro de otro ResourceDictionary. Por ejemplo, no se puede usar
x:Shared
para los elementos de un ResourceDictionary que está dentro de un Style que ya es un elemento ResourceDictionary.
Vea también
.NET Desktop feedback