XAML的标签声明的是对象,一个XAML标签会对应着一个对象,这个对象一般是一个控件类的实例。
x:Name的作用有两个:
(1)告诉XAML编译器,当一个标签带有x:Name时,除了为这个标签生成对应实例外,还要为这个实例声明一个引用变量,变量名就是x:Name的值。
(2)将XAML标签所对应对象的Name属性(如果有)也设为x:Name的值,并把这个值注册到UI树上,以方便查找。
Name属性定义在FrameworkElement类中,这个类是WPF控件的基类,所以所有WPF控件都具有Name这个属性。当一个元素具有Name属性时,使用Name或x:Name效果是一样的。Name和x:Name是可以互换的,只是不能同时出现在一个元素中。因为x:Name的功能涵盖了Name属性的功能,所以全部使用x:Name以增强代码的统一性和可读性。
x:Key的作用是为资源贴上用于检索的索引。
在WPF中,几乎每个元素都有自己的Resources属性,这个属性是个“Key-Value”式的集合,只要把元素放进这个集合,这个元素就成为资源字典中的一个条目,当然,为了能够检索到这个条件,就必须为它添加x:Key。
<Window .......>
<Window.Resources><sys:String x:Key="myString">Hello WPF Resource!</sys:String></Window.Resources>
<StackPanel><TextBox Text="{StaticResource ResourceKey=myString}"/></StackPanel>
</Window >
区别:
x:Key用在XAML Resources,ResourceDictionary需要key来访问。
x:Name用在ResourceDictionary以外任何地方,可以使用x:Name在code-behind访问对象。
x:Key唯一地标识作为资源创建和引用且存在于 ResourceDictionary 中的元素。
x:Name 唯一标识对象元素,以便于从代码隐藏或通用代码中访问实例化的元素。
x:key和x:name的区别,前者是为XAML中定义的资源文件提供唯一的标识,后者是为XAML中定义的控件元素提供唯一标识。