x:Shared 特性

当设置为 false 时,会修改 WPF 资源检索行为,以便特性化资源请求为每个请求创建一个新实例,而不是所有请求共享同一个实例。

XAML 特性用法

<ResourceDictionary>
  <object x:Shared="false".../>
</ResourceDictionary>

备注

x:Shared 映射到 XAML 语言 XAML 命名空间,并由 .NET Framework XAML 服务及其 XAML 读取器识别为有效的 XAML 语言元素。 但是,x:Shared 的规定功能仅与 WPF 应用程序和 WPF XAML 分析器有关。 在 WPF 中,x:Shared 仅当作为特性被应用到存在于 WPF ResourceDictionary 中的对象时才有用。 其他用法不会引发分析异常或其他错误,但它们不起任何作用。

在 XAML 语言规范中未指定 x:Shared 的含义。 其他 XAML 实现,例如在 .NET Framework XAML 服务上生成的实现,不一定提供资源共享支持。 此类 XAML 实现可以在同样使用过 x:Shared 值的支持框架中提供类似行为。

在 WPF 中,资源的默认 x:Shared 条件是 true。 此条件意味着任何给定资源请求都始终返回同一个实例。

修改通过资源 API(如 FindResource)返回的对象或者直接在 ResourceDictionary 内部修改对象会更改原始资源。 如果对该资源的引用是动态资源引用,则该资源的使用者将获得更改后的资源。

如果对资源的引用是静态资源引用,则在 XAML 处理时间之后的资源更改是不相关的。 关于静态资源引用与动态资源引用对比的更多信息,请参见 资源概述

显式指定 x:Shared="true" 很少做,因为这已经是默认行为。 在 WPF 对象模型中,对于 x:Shared,没有直接的代码等效项;它只能在 XAML 用法中指定,且必须由默认 WPF 行为处理,或在加载路径上的中间 XAML 节点流中处理(如果使用 .NET Framework XAML 服务及其 XAML 读取器处理)。

x:Shared="false" 的一种情况是:您将 FrameworkElementFrameworkContentElement 派生类定义为资源,然后将此元素资源引入内容模型。 x:Shared="false" 使得元素资源可以多次引入到同一个集合(如 UIElementCollection)中。 如果没有 x:Shared="false",则这将是无效的,因为集合强制执行内容的唯一性。 但是 x:Shared="false" 行为创建资源的另一个完全相同的实例,而不是返回同一个实例。

指定 x:Shared="false" 的另一种情况是:您对动画值使用一个 Freezable 资源,但希望在每个动画的基础上修改此资源。

false 字符串的处理不区分大小写。

在 WPF 中,x:Shared 只有在满足以下条件的情况下才是有效的:

请参见

参考

ResourceDictionary

概念

资源概述

其他资源

基元素