xaml是一种声明性语言,xaml编译器会为每个标签创建一个与之对应的对象。对象创建出来之后要对它的属性进行必要的初始化之后才有使用意义。因为xaml语言不能编写程序的运行逻辑,所以xaml文档中处理使用标签声明对象就是初始化对象的属性了。
注意:xaml中为对象属性赋值共有两种语法:
1.使用字符串进行简单赋值
2.使用属性元素(Property Element)进行复杂赋值。
使用标签的attribute为对象属性赋值:
Blue这个字符串最终被翻译成了一个SolidColorBrush对象,并赋值给了rectangle对象。
C#代码:
需要注意的是通过这种attribute=value的语法赋值时,由于xaml的语法限制value只可能是一个字符串,这就引出了两个问题:
1、如果一个类能使用xaml语言进行声明,并允许它的property与xaml标签的attribute互相映射,那就需要为这些property准备适当的转换机制。
2、由于value是个字符串,所以其格式复杂程度有限,尽管可以在转换机制里包含一定的按格式解析字符串的功能以便转换成较复杂的目标对象,但是这会让最终的xaml使用者头疼不已。因为他们不得不在没有编码辅助的情况下手写一个格式复杂的字符串以满足赋值要求。
第一个问题的解决方案是使用TypeConverter类的派生类,在派生类里重写TypeConverter的一些方法,第二个问题的解决办法就是使用属性元素(Property Element)。
属性元素
在xaml中,非空标签均具有自己的内容(Content)。标签的内容指的就是夹在起始标签和结束标签之间的一些子级标签,每一个子级标签都是父级标签内容的一个元素(Element),简称为父级标签的一个元素。顾名思义,属性元素指的是某一个标签的一个元素对应这个标签的一个属性,即以元素的形式来表达一个实例的属性:
对于简单的赋值而言属性元素语法并没有什么优势,反而让代码看起来冗长。但遇到属性赋值对象时这种语法的优势就体现出来了。
使用线性渐变刷来填充矩形: