x:Key 指令

唯一标识在 XAML 定义的字典中创建和引用的元素。 将 x:Key 值添加到 XAML 对象元素是标识资源字典中的资源的最常用方法,例如在 WPF ResourceDictionary中。

XAML 属性用法

<object x:Key="stringKeyValue".../>  
-or-  
<object x:Key="{markupExtensionUsage}".../>  

XAML 属性用法(特定于 WPF)

<object.Resources>  
  <object x:Key="stringKeyValue".../>  
</object.Resources>  
-or-  
<object.Resources>  
  <object x:Key="{markupExtensionUsage}".../>  
</object.Resources>  

XAML 值

价值 描述
stringKeyValue 要用作键的文本字符串。 文本字符串必须符合 XamlName 语法
markupExtensionUsage 在标记扩展分隔符 {}中,标记扩展用法提供用作键的对象。 请参阅“备注”。

言论

x:Key 支持 XAML 资源字典概念。 XAML 作为语言未定义资源字典实现,该实现留给特定的 UI 框架。 若要详细了解如何在 WPF 中实现 XAML 资源字典,请参阅 XAML 资源概述(WPF .NET)

在 XAML 2006 和 WPF 中,x:Key 必须作为属性提供。 你仍然可以使用非字符串键,但这需要标记扩展用法才能以属性形式提供非字符串值。 如果使用 XAML 2009,则可以将 x:Key 指定为元素,以显式支持由字符串以外的对象类型键控的字典,而无需标记扩展中间。 请参阅本主题中的“XAML 2009”部分。 “备注”部分的其余部分专门适用于 XAML 2006 实现。

x:Key 的属性值可以是 XamlName 语法 中定义的任何字符串,也可以是通过标记扩展计算的对象。 有关 WPF 的示例,请参阅“WPF 用法说明”。

作为 IDictionary 实现的父元素的子元素通常必须包含一个指定该字典中唯一键值的 x:Key 属性。 框架可能实现别名键属性来替代特定类型的 x:Key;定义此类属性的类型应使用 DictionaryKeyPropertyAttribute进行特性化。

指定 x:Key 的代码等效项是用于基础 IDictionary的键。 例如,在 WPF 中资源标记中应用的 x:Key 相当于在代码中将资源添加到 WPF ResourceDictionaryResourceDictionary.Addkey 参数的值。

WPF 用法说明

作为 IDictionary 实现的父对象的子对象(如 WPF ResourceDictionary)通常必须包含 x:Key 属性,并且键值在该字典中必须唯一。 有两个值得注意的异常:

在 WPF XAML 实现和应用程序模型中,XAML 标记编译器不会检查键唯一性。 相反,缺失或非统一 x:Key 值会导致加载时 XAML 分析器错误。 但是,Visual Studio 处理 WPF 的字典通常可以在设计阶段记下此类错误。

请注意,在显示的语法中,ResourceDictionary 对象隐式表示 WPF XAML 处理器如何生成集合以填充 Resources 集合。 通常不会将 ResourceDictionary 显式提供为标记中的元素,尽管在某些情况下,如果需要清楚起见(这将是 Resources 属性元素和填充字典中的项之间的集合对象元素)。 有关集合对象几乎始终是标记中的隐式元素的原因,请参阅 XAML 语法详细信息

在 WPF XAML 实现中,资源字典键的处理由 ResourceKey 抽象类定义。 但是,WPF XAML 处理器会根据其用法为密钥生成不同的基础扩展类型。 例如,将单独处理 DataTemplate 或任何派生类的键,并生成不同的 DataTemplateKey 对象。

键和名称在基本 XAML 定义中使用不同的指令和语言元素(x:Keyx:Name)。 这些概念的 WPF 定义和应用也在不同的情况下使用键和名称。 有关详细信息,请参阅 WPF XAML 名称范围

如前所述,键的值可以通过标记扩展提供,也可以是字符串值以外的值。 一个示例 WPF 方案是,x:Key 的值可能是 ComponentResourceKey。 某些控件为自定义样式资源公开该类型的样式键,该键会影响该控件的外观和行为的一部分,而不会完全替换样式。 此类键的一个示例是 ButtonStyleKey

WPF 合并字典功能引入了键唯一性和键查找行为的其他注意事项。 有关详细信息,请参阅 合并资源字典

XAML 2009

XAML 2009 放宽了始终以属性形式提供 x:Key 的限制。

在 WPF 中,可以使用 XAML 2009 功能,但仅适用于未编译标记的 XAML。 WPF 的标记编译 XAML 和 XAML 的 BAML 形式目前不支持 XAML 2009 关键字和功能。

在 XAML 2009 下,可以通过以下用法指定 x:Key 元素:

XAML 元素用法(仅限 XAML 2009)

<object>  
  <x:Key>  
keyObject  
  </x:Key>  
...  
</object>  

XAML 值

价值 描述
keyObject 用作专用字典中给定 object 键的对象的对象元素。
  • 此处未显示此类使用的容器/父级。 object 应为表示专用字典实现的对象元素的子元素。 keyObject 应是一个对象实例(或值类型的值),该实例适合用作该特定专用字典实现的键。

  • WPF 不实现需要此用法的字典。 对象键是 XAML 语言的一般功能,对于某些在 XAML 中创建字典的自定义词典方案可能很有用。 对于对资源使用非字符串键的隐式样式等 WPF 功能,其他用于建立或指定键的技术存在,因此不需要使用对象键。

  • keyObject 也可以是对象元素形式的标记扩展用法,而不是直接对象实例。

Silverlight 用法说明

Silverlight 的 x:Key 单独记录。 有关详细信息,请参阅 XAML 命名空间(x:)语言功能(Silverlight)

另请参阅