2010-12-13 66 views
45

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

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

+1

@Alastair,您列出的可能与此无关的问题与此无关。 – Josh 2010-12-13 03:39:51

+1

它是如何重复的?另一个问题是关于'Name'与'Type'的关系。这个问题是关于'Key'与'Name'的关系。 – jalf 2010-12-13 03:40:28

+0

我的错误,我误读了“可能的欺骗”问题。道歉。 – 2010-12-13 03:51:20

回答

43

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

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

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

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

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

有关这些的更多信息,请参阅the x:Name directive的MSDN文档的备注部分。

20

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

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