零起点学习WPF之《WPF揭秘》读书笔记(4)
2.8.3XAML 关键字
XAML语言命名空间(http://schemas.microsoft.com/winfx/2006/xaml)定义了一批XAML解析器和编译器必须特殊处理的关键字。
XAML命名空间的关键字,采用习惯性的x作为命名控件的前缀。
关键字 |
何时有效 |
含义与描述 |
x:Class |
根元素的特性 |
为根元素定义一个派生自元素类型的类,也可以在类型前面加上.NET命名空间的前缀。(可选) |
x:ClassModifier |
根元素的特性,必须与x:Class一起使用 |
定义由x:Class指定的类的可见性【默认是可见的】。例如C#中的public 和 internal |
x:Code |
XAML的任何位置元素,但必须与x:Class一起使用 |
嵌入过程式代码,会被插入由x:Class指定的类中 |
x:FileModifier |
非根元素上的特性,但必须与x:Name(或者等效关键字)一起使用 |
定义生成的元素【默认是内部元素】字段的可见性。例如C#中的public internal 等等。 |
x:Key |
父元素实现了IDictionary接口 |
当被添加到父元素的字典中时,请为该项添加键名。 |
x:Name |
非根元素上的特性,但必须与x:Class一起使用 |
为 给元素生成的字段选择一个名称,这样它就可以在过程式代码中使用了。 |
x:Shared |
Resource-IDictionary对象中的元素特性,但只有在XAML编译后才可使用。 |
可以被设置为False用来避免多个地方共享资源实例。 |
x:SubClass |
根元素的特性,与x:Class一起使用 |
为保存XAML内容的x:Class类指定一个子类,可以用.NET命名空间作为可选前缀。(用于那些不支持部分类的语言) |
x:TypeArguments |
根元素特性,必须与x:Class一起使用 |
使根类成为泛型,如List<T>,且带有指定的泛型参数实例(如:List<int32>,List<string>),可以设置一个用逗号泛型参数代码清单,如果某种类型不在默认的命名空间里,则需要加上XML命名空间前缀 |
x:Uid |
元素特性 |
为元素 添加一个本地化的ID |
x:Xdata |
用于某一个IXmlSerializable类型属性的值的元素。 |
对XAML解析器透明的任一个XML数据岛 |
|
|
下面这些是XAML中的标记扩展(如System.Windows.MarkUp命名空间中正真的.NET类)【注意表中的每一个类的后缀Extension |
标记扩展 |
|
含义 |
x:Array |
|
代表一个.NET数组,x:Array元素的子元素都是数组元素,它必须与x;Type一起使用、用于定义数组类型。 |
x:Null |
|
表示一个空引用 |
x:Static |
|
引用在过程式代码中定义的任何一个静态的属性、常量或者枚举值。在XAML编译后这也可以是用一个程序集中的一个非公共成员。如果在默认的命名空间没有该类型,Member字符串必须有XML命名空间前缀。 |
x;Type |
|
表示System.Type的一个实例就是C#中的typeof操作符。如果在默认的命名空间没有该类型,TypeName字符串必须有XML命名空间前缀。 |
|
|
|
【小节】
至此,我们可以将XAML语言转化成相应.NET语言(比如:C#),也可以把C#语言转化成XAML。然而、因为类型转换器金额标记扩展是“黑盒”,直接翻译或者是转化是不太可能的。也就是说,如果你不能理解在内部转换是如何进行的也没有关系,因为从过程是代码中直接调用类型转化器也是可选的。(许多拥有对应的类型转化器的类、都会提供一个静态的Parse方法 ,做的都是同样的一件事,这是为了简化过程是代码而加进去的。)