x:Name用来在XAML中表示一个制定对象的名称;可以通过它来访问XAML对应的资源;
Name在.net的很多类中都存在,在WPF中可以和x:Name互换。
结果:
1. 在XAML中只存在x:Name,
2. 我们使用的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!
关于两者的使用,主要看项目的编码规范。