我是 Silverlight 新手。
当我使用 Visual Studio 将一些控件添加到我的 xaml 文件时,它使用 Name 属性设置控件名称,但也有 x:Name。
它们有什么区别以及何时使用它们?
谢谢。
最佳答案
简介
是的,有区别。最重要的是,x:Name
可以用在没有自己的 Name
属性的对象元素上。
更长的解释
您只能在代表实际具有 Name
属性的对象的元素上使用 Name
。例如,从 FrameworkElement
派生的任何内容。
x:Name
属性可以放置在表示对象的任何元素上,无论该对象实际上是否具有 Name
属性。如果对象确实具有 Name
属性,则 x:Name
的值将分配给它,因此您不能同时拥有 x:Name
> 和 Name
在同一元素上。
当对象具有 Name
属性或 x:Name
属性时,该属性的值与对象树中的对象条目关联。 FrameworkElement
的 FindName
方法可以通过对象树查找对象。 FindName
可以按名称查找对象,即使该对象不带有自己的 Name
属性,因为它使用对象树中记录的名称。
UserControl
自动生成的代码将包含具有 Name
或 x:Name
属性的任何元素的字段定义。生成的 InitialiseComponent
方法将使用 FindName
方法为这些字段分配值。
示例
上面的 Xaml 创建了两个 Grid
类型的 LayoutRoot
和 SolidColorBrush
类型的 MyBrush
。如果您将 x:Name="LayoutRoot"
更改为 Name="LayoutRoot"
则不会发生任何变化。 Grid
有一个 Name
属性。不过,请尝试将 x:Name="MyBrush"
更改为 Name="MyBrush"
。这不起作用,因为 SolidColorBrush
没有 name 属性。使用上面的 Xaml,您可以执行如下代码:-
public MainPage()
{
InitializeComponent();
MyBrush.Color = Colors.LightGray;
}
打开InitializeComponent
的定义并查看自动生成的代码。
关于silverlight - x :name and name for controls in xaml file? 有什么区别吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3379230/