x:Shared 特性

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

XAML 属性用法

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

备注

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

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

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

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

如果对资源的引用是静态资源引用,则在 XAML 处理时间之后对资源进行的更改是无关更改。 有关静态和动态资源引用的详细信息,请参阅 XAML 资源概述 (WPF .NET)

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

x:Shared="false" 的一个场景是,将 FrameworkElementFrameworkContentElement 派生类定义为资源,然后将元素资源引入内容模型。 x:Shared="false" 允许在同一集合(例如 UIElementCollection)中多次引入元素资源。 如果没有 x:Shared="false",则此操作无效,因为集合会强制执行其内容的唯一性。 但是,x:Shared="false" 行为会创建资源的另一个相同实例,而不是返回同一实例。

x:Shared="false" 的另一个场景是,对动画值使用 Freezable 资源,但希望根据每个动画修改该资源。

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

在 WPF 中,x:Shared 仅在以下条件下有效:

另请参阅