Compartir a través de


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:

Consulte también