x:Key和x:WPF中的名称有什么区别?

时间:2010-12-13 03:23:29

标签: wpf

WPF中x:Keyx:Name之间有什么区别?

我不确定真正的区别是什么。

2 个答案:

答案 0 :(得分:50)

虽然它们用于类似目的,但它们不可互换。 x:Key用于作为值添加到字典中的项目,通常用于添加到ResourceDictionary的样式和其他资源。设置x:Key属性时,实际上对象上没有相应的属性,甚至没有设置附加的依赖项属性。 XAML处理器简单地使用它来知道调用Dictionary.Add时要使用的密钥。

x:名称有点复杂。它用于在某个父元素的范围内将关联名称应用于对象(通常是从FrameworkElement派生的对象)。这个范围被称为“名称范围”,最简单的思考方式是想象一个包含<TextBox x:Name="foo" />的UserControl。

然后,您可以将UserControl的多个实例放在一个没有名称“foo”冲突的Window上,因为每个UserControl都有自己的名称范围。

值得注意的是,FrameworkElement定义了一个名为Name的依赖项属性,它等同于设置x:Name。

另一个区别是XAML设计器在代码隐藏中为具有x:Name的元素创建成员。对于使用x:Key添加到字典中的对象,情况并非如此。

您可以在the x:Name directive的MSDN文档的备注部分找到有关这些内容的更多信息。

答案 1 :(得分:21)

x:Key仅在ResourceDictionary元素的范围内有效。 x:Key用作ResourceDictionary中元素的主要标识符。

另一方面,x:Name在除ResourceDictionary之外的所有内容中都有效。 x:密钥在ResourceDictionary范围之外无效。