silverlight - x :name and name for controls in xaml file? 有什么区别吗

标签 silverlight xaml silverlight-4.0 silverlight-3.0 silverlight-2.0

我是 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 属性时,该属性的值与对象树中的对象条目关联。 FrameworkElementFindName 方法可以通过对象树查找对象。 FindName 可以按名称查找对象,即使该对象不带有自己的 Name 属性,因为它使用对象树中记录的名称。

UserControl 自动生成的代码将包含具有 Namex:Name 属性的任何元素的字段定义。生成的 InitialiseComponent 方法将使用 FindName 方法为这些字段分配值。

示例

上面的 Xaml 创建了两个 Grid 类型的 LayoutRootSolidColorBrush 类型的 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/

相关文章:

silverlight - 如何在代码中将 "#00E4FF"转换为 Brush?

c# - WPF在TabControl的DataTemplate中绑定(bind)不同的UserControl

c# - 如何在 Silverlight TextBlock 中用省略号截断字符串?

silverlight - 混合 RIA 服务和标准 WCF 服务

从调试切换到发布时,Silverlight 无法解析引用

WPF、Silverlight、Winforms、WebForms 等的 .NET Forms 抽象

silverlight - 在 SSL 中部署 WCF 服务和 silverlight

c# - 如何使用 InvokeCommandAction 调用我的方法并传入参数?

silverlight - 蒙皮控制背景 - 更好的性能?

wpf - 在按钮中启用助记符