x名称空间由来:
x名称空间里的成员是专门为XAML编译器看的,用来引导XAML编译器把XAML编译成CLR代码,因此x是XAML的首字母。通过x空间的成员告诉编译器怎么编译XAML,生成什么类名,属性的可访问性等。
x名称空间中的Attribute:
x:Class,用来告诉XAML编译器把XAML标签的编译结果与后台代码的哪个类合并,只能用于根节点,并且根节点的类型要与后台代码的类保持一致。
x:ClassModifier,用来告诉XAML编译器把XAML标签编译成的类具有怎样的访问级别,必须具有x:Class Attribute的标签才能应用,并且与指定的后端代码访问级别一致。
x:Name,用来告诉XAML编译器把创建的对象指向到指定的变量名,这样可以直接在代码中引用该对象。如果标签具有Name属性,同时把Name属性赋值为x:Name指定的值。为了增强代码的统一性,全部使用x:Name来指定对象的变量名。
x:FieldModifier,用来告诉XAML编译器由该标签生成的类的字段的访问级别,默认为internal。
x:Key,为资源字典指定key值,在XAML中通过StaticResource标记扩展进行资源检索时使用,并且可以自动向父级元素检索并一直递归直到找到该资源或到达Application。通过在代码中使用.FindResource方法也可以进行递归检索资源。
x:Shared,与x:Key配合使用,用来指定检索资源对象时,是使用同一个对象副本还是不同的对象,默认x:Share=“True”,因此资源检索得到的是同一个对象。
x名称空间中的标记扩展:
x:Type,类型为TypeExtension的标记扩展,用来在XAML中指定Type类型,与C#中的typeof关键字类似。x:Type的默认参数为类型,如{x:Type local:MyWindow}或{x:Type TypeName=local:MyWindow}。
x:Null,类型为NullExtension的标记扩展,用来在XAML中显示为属性指定Null值,如果在资源字典中定义了Style并把key和TargetType都指定为目标类型,则目标类型的所有标签都默认使用该Style。如果控件不想使用默认Style,则可以为Style指定null,如Style={x:Null}。
标记扩展除了使用标准的大括号形式使用,还可以使用属性元素的语法声明,如<Button.Style><x:Null /></Button.Style>,显然这种写法太繁琐,但如果使用x:Array标记扩展,则必须使用这种标签形式语法。
x:Array,类型为ArrayExtension的标记扩展,用来在XAML中声明数组对象,只能使用标签语法,如以下代码片段
<ListBox> <ListBox.ItemsSource> <x:Array Type="sys:String"> <sys:String>String1</sys:String> <sys:String>String2</sys:String> <sys:String>String3</sys:String> </x:Array> </ListBox.ItemsSource> </ListBox>
x:Static,类型为StaticExtension的标记扩展,用来在XAML中引用类的静态字段或静态属性,如Text={x:Static local:Window1.ShowText}。
XAML指令元素:
XAML指令元素只有两个,x:Code和x:XData,x:Code用来把C#代码放到XAML中,x:XData用来为数据提供者提供数据,如以下代码片段
<Page.Resources> <XmlDataProvider x:Key="asdf"> <x:XData> <Root> <Item>Item1</Item> <Item>Item2</Item> </Root> </x:XData> </XmlDataProvider> </Page.Resources>