WPF中 x:Name和Name的区别

x:Name 唯一地标识 XAML 定义的对象,以便于从代码隐藏或通用代码中访问对象图中实例化的对象。x:Name 一旦应用于支持编程模型,便可被视为与由构造函数返回的用于保存对象引用或实例的变量等效。

x:Name 用来在XAML中表示一个指定对象的名称;可以通过他来访问XAML对应隐藏代码所关联的对象。
Name 许多框架的类中都有Name这个属性,而在WPF中,x:Name和Name是可以互换的。

所以现阶段他们两者做的是同样的工作。

结果:

  1. xmal中,永远只有一个, 它就是x:Name;
  2. 我们在xaml中有时能使用的Name,其实是被映射到x:Name上的。

原因:

  1. 所有的Type在xaml中都能使用x:Name,即使这个type 没有定义一个叫着Name的Property。因为xmal会在后台为其分配一个field来存储,以便在Binding等里面使用。
  2. 像FrameworkElement, VisualStateGroup的某些type,我们在xaml中可以使用Name来代替x:Name,因为它们定义了Name Property,但是最关键的是在type上声明了一个Attribute,[RuntimeNameProperty(“Name”)],正是这个attribute把Name映射到了x:Name上,所以让Name可以做到x:Name的功能。

XAML中x:Name与Name并不完全等价。
不是所有类型都可以使用Name,但是任何类型都可以使用x:Name。

只有拥有Name属性,才可以在XAML中使用Name。不同于x:Name,因为这个是附加属性。

并且该类型、或者其父类型标记了RuntimeNameProperty特性,才拥有与x:Name一样的效果。

例如:便会报错,因为SolidColorBrush没有Name属性。

只能使用x:Name。

扩展:
如果我们的某些type需要定义一个 Property,并且想做到x:Name的能力,别忘了加上RuntimeNamePropertyAttribute!

这个只是一个代码编写风格和习惯的问题,而不是一个技术问题。

**

总之,WPF中使用x:Name就对了!

**
转自:https://www.cnblogs.com/xust/articles/3713092.html

猜你喜欢

转载自blog.csdn.net/qq_27508477/article/details/88090853
今日推荐