Atributo x:Shared
Cuando se establece en false
, modifica el comportamiento de recuperación de recursos de WPF para que las solicitudes del 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>
Observaciones
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 ResourceDictionaryde WPF. Otros usos no producen excepciones de análisis ni 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 podrían proporcionar un comportamiento similar en el marco de soporte que también usaba valores x:Shared
.
En WPF, la condición de x:Shared
predeterminada 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 FindResourceo modificar un objeto directamente dentro de un ResourceDictionary, cambia el recurso original. Si las referencias a ese recurso eran referencias de recursos dinámicos, los consumidores de ese recurso obtienen el recurso cambiado.
Si las referencias al recurso eran referencias a recursos estáticos, los cambios realizados en el recurso después del tiempo de procesamiento de XAML son irrelevantes. Para obtener más información sobre las referencias a recursos estáticos frente a dinámicos, consulte Información general de recursos XAML (WPF .NET).
La especificación explícita de x:Shared="true"
rara vez se realiza, 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 de 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 un FrameworkElement o FrameworkContentElement clase derivada 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, un UIElementCollection). Sin x:Shared="false"
esto no es válido porque la colección exige la unicidad de su contenido. Sin embargo, el comportamiento 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 de Freezable para los valores de animación, pero quiere modificar el recurso por animación.
El control de cadenas de false
no distingue mayúsculas de minúsculas.
En WPF, x:Shared
solo es válido en las condiciones siguientes:
El ResourceDictionary que contiene los elementos con
x:Shared
debe compilarse. El ResourceDictionary no puede estar dentro de XAML flexible ni usarse para temas.El ResourceDictionary que contiene los elementos no se debe anidar dentro de otro ResourceDictionary. Por ejemplo, no puede usar
x:Shared
para los elementos de un ResourceDictionary que se encuentra dentro de un Style que ya es un elemento de ResourceDictionary.
Consulte también
- ResourceDictionary
- información general de recursos XAML (WPF .NET)
- elementos base de
.NET Desktop feedback