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中存在的对象时,x:Shared 才有用。 其他用法不会引发分析异常或其他错误,但它们不起作用。

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 仅在以下条件下有效:

另请参阅