1、XAML定义
XAML是一种相对简单、通用的声明式编程语言,适用于构建和初始化.net对象,它仅仅是使用.net API的方式,.netframework3.0包含了XAML编译器和运行时解析器
查看XAML工具(windows sdk 自带XamlPad,开源工具kaxaml )
2、元素和特性
XAML规范定义了一些规则,用于把.net命名空间、类型、属性、事件映射为XML命名空间、元素、特性。
举例说明:
XAML: <Button xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Content="OK"/>
XAML中定义的一个XML元素与.Net中实例化一个对应的对象是等价的
System.Windows.Controls.Button b=new System.Windows.Controls.Button();
b.Content="OK"
3、命名空间
不知道大家注意上述Button对象中xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"没有,实际上这个不是网址,这串字符是被映射到System.Windows.Controls上的,这个映射关系是WPF程序集中硬编码完成的。
4、属性元素
富创作是WPF亮点之一,按钮内容不仅仅只限于文本,可以把任意内容放在里面,例如:将Button 中的属性Content采用矩形填充,
<Button.Content>
<Rectangle Height=“40” Width=“40” Fill="black"/>
</Button.Content>
上述代码制定Button的内容为一个黑色40*40的正方形。
5、类型转换器
举例说明:设置按钮背景色:
<Button.Background>
white
</Button.Background>
那么问题来了,white是怎么对应System.Windows.Media.Brushes.White这个类型的,实际上XAML解析器会寻找类型转换器,WPF提供了很多类型转换器,Brush、Color、Font Weight、Point等,它们都是派生TypeConverter,你可以从TypeConverter派生自己的类型转换器
6、标记扩展
标记扩展目的是扩展XAML的表达能力,WPF内建的标记扩展都派生自MarkupExtention,使用{}括号来表明该属性是标记扩展
上述标记扩展没有搞的太明白,如果有朋友能够清晰说明,可以到下面评论区进行解释
7、对象元素的子元素
WPF中对象元素可以包含子元素,其中包含两种类型:内容属性和集合项;
内容属性就如Button中Content属性,任何内容都可以放。
集合项: ComboBox 、 ListBox 和 TabControl
8、编译:将XAML与过程式代码混合使用
WPF允许用任何一种.NET语言完全以过程式代码编写应用程序。
1、加载XAML,FileStream读取XAML文件,然后使用XamlReader来加载Stream,如果有大文件时,采用LoadAsync异步加载,保持界面响应, 主要针对动态皮肤
2、编译XAML,可以查看示例程序
3、XAML关键字列表