【发布时间】:2015-10-08 21:40:01
【问题描述】:
WPF中x:Key和x:Name有什么区别?
我不确定真正的区别是什么。
【问题讨论】:
标签: wpf
WPF中x:Key和x:Name有什么区别?
我不确定真正的区别是什么。
【问题讨论】:
标签: wpf
尽管它们用于类似的目的,但它们不可互换。 x:Key 用于作为值添加到字典中的项目,最常用于添加到 ResourceDictionary 的样式和其他资源。设置 x:Key 属性时,对象上实际上没有相应的属性,甚至没有设置附加的依赖属性。 XAML 处理器仅使用它来了解调用 Dictionary.Add 时使用什么键。
x:Name 有点复杂。它用于将关联名称应用于某个父元素范围内的对象(通常是从 FrameworkElement 派生的对象)。这个范围称为“名称范围”,最简单的理解方法是想象一个包含<TextBox x:Name="foo" /> 的 UserControl。
然后,您可以将 UserControl 的多个实例放到一个 Window 上,而不会发生名称“foo”冲突,因为每个 UserControl 都有自己的名称范围。
同样值得注意的是,FrameworkElement 定义了一个名为 Name 的依赖属性,相当于设置 x:Name。
另一个区别是 XAML 设计器在代码隐藏中为具有 x:Name 的元素创建成员。对于使用 x:Key 添加到字典的对象,情况并非如此。
您可以在 the x:Name directive 的 MSDN 文档的备注部分中找到有关这些的更多信息。
【讨论】:
x:Key 仅在 ResourceDictionary 元素的范围内有效。 x:Key 用作 ResourceDictionary 中元素的主要标识符。
另一方面,x:Name 在除 ResourceDictionary 之外的所有范围内都是有效的。 x:Key 在 ResourceDictionary 范围之外无效。
【讨论】: