WPF中x:Key
和x:Name
之间有什么区别?
我不确定真正的区别是什么。
答案 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范围之外无效。