代码之家  ›  专栏  ›  技术社区  ›  Samvel Siradeghyan

xaml文件中的x:name和控件名有什么区别吗?

  •  6
  • Samvel Siradeghyan  · 技术社区  · 15 年前


    当我用visualstudio向xaml文件中添加一些控件时,它会用name属性设置控件名,但是还有x:name。
    它们有什么区别吗?什么时候用?
    谢谢。

    3 回复  |  直到 11 年前
        1
  •  13
  •   AnthonyWJones    15 年前

    简而言之

    x:Name 可用于没有 Name 他们自己的财产。

    更详细的解释

    姓名 在表示实际具有 财产。例如,从 FrameworkElement .

    这个 属性可以放置在表示对象的任何元素上 不管 那个物体是否真的有 财产。如果对象确实有 姓名 x:姓名 将分配给它,因此您不能同时拥有这两个 x:姓名 姓名 在同一个元素上。

    当对象具有 财产或财产 x:姓名 属性该属性的值与对象树中的对象条目相关联。通过对象树 FindName 框架元件 可以找到一个物体。 查找名称 可以按名称查找对象,即使该对象没有 姓名 属性,因为它使用对象树中记录的名称。

    UserControl 将包含具有 x:姓名 财产。这个 InitialiseComponent 生成的方法将使用 查找名称 方法为这些字段赋值。

    例子

    上面的Xaml创建了两个字段 LayoutRoot 类型 Grid MyBrush 类型 SolidColorBrush x:Name="LayoutRoot" Name="LayoutRoot" 有一个 姓名 财产。但是试着改变 x:Name="MyBrush" Name="MyBrush" 没有name属性。使用上面的Xaml,您可以执行如下代码this:-

        public MainPage()
        {
            InitializeComponent();
            MyBrush.Color = Colors.LightGray;
        }
    

    打开的定义 InitializeComponent 看看自动生成的代码。

        2
  •  2
  •   Dan Auclair    15 年前

    不,你不能两个都用。x:Name是XAML预处理器实际使用的名称,Name只是FrameworkElement类上提供的一个方便的属性来设置它。

    MSDN reference :

    如果Name作为元素的属性可用,那么Name和x:Name可以互换使用,但是如果在同一元素上指定了这两个属性,则会产生错误。

        3
  •  1
  •   Wolf Schmidt-MSFT    15 年前

    简而言之:如果您要用XAML编写东西,那么最好始终使用x:Name。

    长答案:前面的答案提到Name是访问x:Name的“便利”属性。没错。然而,现在visualstudio和Expression系列中用于XAML的工具环境已经真正成熟,并且您看到越来越多的工具生成的XAML,您也可能看到越来越多的x:Name而不是Name。这些工具更喜欢x:Name,因为这样它们就不会有风险地依赖(可能特定于框架)关于x:Name和Name是如何真正相同的,如果某个东西碰巧是一个框架元素,那么它们不需要在设置Name和x:Name之间来回切换,如果您要通过DOM之类的东西来查看这个XAML,那么它们就不需要在故事板和生成二元性之间来回切换。换句话说,XAML中的“Name”属性现在使用起来确实比原始API设计中所设想的要“方便”得多。“方便”的一部分是不必映射x:,但是对于x:Class无论如何都必须这样做,现在几乎每个人都已经习惯了有效地使用x:attributes和XAML标记的一般原则。

    我不确定的声明,由原来的海报,VS鼓励使用名称。是的,Name显示为intellisense选项,但x:Name也显示为intellisense选项。我在模板中看到的所有给一个对象起名字的例子都是使用x:name,尽管其中大多数都是frameworkelement。