小编典典

在 WPF 中,x:Name 和 Name 属性有什么区别?

all

Name有时,和属性似乎x:Name可以互换。

那么,它们之间的明确区别是什么,什么时候最好使用一种而不是另一种呢?

以错误的方式使用它们是否会对性能或内存产生影响?


阅读 111

收藏
2022-03-04

共1个答案

小编典典

XAML 中确实只有一个名称,x:Name. 框架(如 WPF)可以选择将其属性之一映射到 XAML
x:Name,方法是使用RuntimeNamePropertyAttribute类上的 ,将类属性之一指定为映射到 XAML 的 x:Name
属性。

这样做的原因是允许在运行时已经具有“名称”概念的框架,例如 WPF。例如,在 WPF 中,FrameworkElement引入了 Name 属性。

通常,类不需要存储名称x:Name即可使用。XAML
的所有x:Name手段都是生成一个字段以将值存储在类后面的代码中。运行时对该映射的作用取决于框架。

那么,为什么有两种方法可以做同样的事情呢?简单的答案是因为有两个概念映射到一个属性。WPF 希望在运行时保留元素的名称(可通过 Bind 等使用),并且
XAML 需要知道您希望哪些元素可以被类后面的代码中的字段访问。WPF 通过将 Name 属性标记为 x:Name 的别名,将这两者联系在一起。

未来 XAML 将有更多 x:Name 的用途,例如允许您通过名称引用其他对象来设置属性,但在 3.5 及之前的版本中,它仅用于创建字段。

是否应该使用其中一个确实是一个风格问题,而不是技术问题。我会把它留给其他人推荐。

2022-03-04