什么';WPF中x:Key和x:Name的区别是什么?

什么';WPF中x:Key和x:Name的区别是什么?,wpf,Wpf,WPF中的x:Key和x:Name有什么区别 我不确定真正的区别是什么。尽管它们用于类似的目的,但它们不可互换。x:Key用于作为值添加到字典中的项,通常用于添加到ResourceDictionary中的样式和其他资源。设置x:Key属性时,对象上实际上没有相应的属性,甚至没有设置附加的依赖属性。XAML处理器只需使用它来知道调用Dictionary.Add时要使用什么键 x:名字有点复杂。它用于将关联名称应用于某个父元素范围内的对象(通常是从FrameworkElement派生的对象)。这个作

WPF中的
x:Key
x:Name
有什么区别


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

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

x:名字有点复杂。它用于将关联名称应用于某个父元素范围内的对象(通常是从FrameworkElement派生的对象)。这个作用域称为“名称作用域”,最简单的方法是想象一个包含
的用户控件

然后,您可以将UserControl的多个实例放在一个窗口上,而不会使名称“foo”发生冲突,因为每个UserControl都有自己的名称范围

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

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


您可以在MSDN文档的备注部分找到有关这些的更多信息。

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

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