.net - 在WPF ,x:name和名称属性之间的区别是什么呢?

  显示原文与译文双语对照的内容

标题上写着。 有时候 Namex:Name 属性是可以互换的。

那么,它们之间的区别是什么,在其他情况下使用它们是什么时候更好?

对使用它们的性能或者内存有什么影响?

到目前为止的编辑响应建议使用 x:Name 一直工作良好,但我仍然想知道差异是什么。 微软将这两个属性放到第一个版本的WPF中,所以必须有一些合理的解释。

时间:

在XAML中实际上只有一个名称,x:Name 。 框架,如 WPF,可以选择将它的一个属性映射到 x:Name,它使用类上的RuntimeNamePropertyAttribute 将一个类属性作为映射到XAML的x:Name 属性的映射。

这样做的原因是允许框架在运行时具有"姓名"概念,比如 WPF 。 例如在WPF中,FrameworkElement 引入了一个名称属性。

通常,类不需要存储 x:Name的名称以便可以使用。 所有 x:Name 方法都是生成一个字段来在类后面的代码中存储值。 运行时对映射所做的是框架依赖。

那么,为什么有两种方法来做同样的事情? 简单答案,因为有两个概念映射到一个属性上。 WPF希望在运行时保留一个元素的名称( 通过绑定可以使用,其中包括) 和XAML需要知道在类后面的代码中的字段可以访问哪些元素。 通过将名称属性标记为 x:Name.的别名,WPF将它们绑定在一起

将来,XAML将有更多的使用 x:Name,,比如允许你通过名称引用其他对象,但在 3.5和之前,它只用于创建字段。

是否使用一个或者另一个是真正的风格问题,而不是技术问题。 我将把它留给其他人推荐。

参见 AutomationProperties.Name vs x:Name 。AutomationProperties.Name 工具使用的工具和一些测试工具。

他们不是同一个人。

x:Name 是一个xaml概念,主要用于引用元素。 当给元素 x:Name xaml属性"指定的x:Name 成为在处理xaml时在基础代码中创建的字段的名称,该字段保留对对象的引用。"( MSDN ) 时,它是一个designer-generated字段,它在默认情况下具有内部访问权。

NameFrameworkElement的现有字符串属性,它作为一个xaml属性形式的其他任何wpf元素属性列出。

因此,这也意味着 x:Name 可以在更广泛的对象上使用。 这是一种技术,可以通过给定名称来引用xaml中的任何内容。

它们都是一样的,很多框架元素暴露一个名称属性本身,但是对于那些不可以使用 x:name的人,我通常只使用 x:name,因为它适用于所有东西。

控件可以将自己命名为 DP,如果他们想要( 因为他们需要在内部使用 DP ),或者他们可以选择不。

在 msdn 中更详细的细节这里是,这里是:

某些 WPF framework-level应用程序可能可以避免使用 x:name 属性,因为在WPF命名空间中为几个重要基类( 如 frameworkelement/FrameworkContentElement ) 中指定的名称依赖项属性满足相同的目的。 仍然有一些常见的XAML和框架场景,其中需要对没有名称属性的元素进行代码访问,最值得注意的是某些动画和 Storyboard 支持类。 例如你应该在时间线上指定 x:name,并在XAML中创建转换,如果你打算从代码引用它们。

如果名称作为类的属性可用,名称和 x:name 可以互换使用作为属性,但如果在同一元素上指定了两者,则会产生错误。

它不是一个WPF项目而是一个标准XML有且 BtBh 具有正确拿起话筒,x 指的是默认名称空间。 在XML中,当你不使用名称空间前缀元素/属性时,它假定你想要默认命名空间。 所以输入 Name 只不过是 x:Name的一小手。 关于XML命名空间的更多细节可以在链接文本列表中找到

...