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的功能。


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

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


知识共享许可协议
《WPF中 x:Name和Name的区别》常伟华 创作。
采用 知识共享 署名-相同方式共享 3.0 中国大陆 许可协议进行许可。
相邻依据:发表时间
  • 多说评论
  • 签名
  • 新浪微博
  • 默认评论
  • Tab Header 5

0 条评论 / 点击此处发表评论

Tab Content 5

开发技术


开发平台和工具

sitemap     179.04ms