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"
的一个场景是,将 FrameworkElement 或 FrameworkContentElement 派生类定义为资源,然后将元素资源引入内容模型。 x:Shared="false"
允许在同一集合(例如 UIElementCollection)中多次引入元素资源。 如果没有 x:Shared="false"
,则此操作无效,因为集合会强制执行其内容的唯一性。 但是,x:Shared="false"
行为会创建资源的另一个相同实例,而不是返回同一实例。
x:Shared="false"
的另一个场景是,对动画值使用 Freezable 资源,但希望根据每个动画修改该资源。
false
的字符串处理不区分大小写。
在 WPF 中,x:Shared
仅在以下条件下有效:
必须编译包含带有
x:Shared
的项的 ResourceDictionary。 ResourceDictionary 不能位于宽松 XAML 中,也不能用于主题。包含项的 ResourceDictionary 不得嵌套在另一个 ResourceDictionary 中。 例如,对于已经是 ResourceDictionary 项的 Style 中的 ResourceDictionary 中的项,不能使用
x:Shared
。