WPF中x:Key和x:Name有什么区别?

60

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

我不确定它们之间的真正区别是什么。


(注:该翻译保留了原有的html标签)
2个回答

55
尽管它们被用于类似的目的,但它们并不可互换。x:Key用于将项作为值添加到字典中,通常用于将样式和其他资源添加到ResourceDictionary中。当设置x:Key属性时,实际上没有在对象上设置相应的属性甚至没有设置附加的依赖属性。它仅仅是由XAML处理器用于知道调用Dictionary.Add时要使用什么关键字。
x:Name更加复杂。它用于在一些父元素的范围内将一个相关联的名称应用到对象(通常是从FrameworkElement派生的对象)上。这个范围称为“命名范围”,最简单的想法是想象一个包含<TextBox x:Name="foo" />的UserControl。
然后,您可以将多个UserControl实例放置在窗口上而不会发生名称“foo”冲突,因为每个UserControl都有自己的命名范围。
值得注意的是,FrameworkElement定义了一个名为Name的依赖属性,它等同于设置x:Name。
另一个区别是XAML设计器会为具有x:Name的元素在代码后台创建成员,对于使用x:Key添加到字典中的对象则不是这样。
您可以在MSDN文档x:Name指令的备注部分中找到更多信息。

24

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

而 x:Name 在除 ResourceDictionary 之外的所有范围内都有效。x:Key 不适用于 ResourceDictionary 范围之外。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接