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

x:Keyx:Name WPF中的x:Name什么区别?

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

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

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

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

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

另一个区别是,XAMLdevise器在具有x:Name的元素的代码隐藏中创build成员。 使用x:Key添加到字典中的对象不是这样。

在x:Name指令的MSDN文档的备注部分可以find关于这些信息的更多信息。

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

另一方面,x:Name在除ResourceDictionary以外的所有其他范围内都是有效的。 x:Key在ResourceDictionary范围外无效。