WPF基础学习笔记整理 (二) XAML
基础知识:
- XAML:Extensible Application Markup Language, zammel;
- 用于实例化.NET对象的标记语言;
- XMAL使用树形逻辑结构描述UI;
- BAML:Binary Application Markup Language,即XMAL的二进制表示,VS会在编译WPF应用程序时,将所有XAML转换为BAML,且BAML最终会作为资源被嵌入到DLL或EXE程序集中;
- BAML是标记化的,故相对于XAML较小;
- WPF应用程序三个顶级元素:Window、Page和Application;.
-
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- WPF的核心命名空间,包含了所有WPF类,包括构建用户界面的控件;
-
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- XAML命名空间,包含各种XAML使用特性,这些特性可以影响文档的解释方式;
- 上边两个命名空间是通过使用URI(Uniform Resource Identifier)格式的命名空间;
- 1、schemas.com域归Microsoft拥有,只有Microsoft会使用它,从而防止了其它组织的使用;
- 2、XAML中使用的XML命名空间和.NET命名空间不是一一对应的,它是一个多个命名空间的集合,使用URI可以将它们组合到一个XML命名空间中,防止了多个命名空间引起的使用混乱;
- Window类中的InitializeComponent()方法的所有工作就是调用System.Windows.Application类的LoadComponent()方法,从程序集中提取BAML,构建用户界面(创建所有控件对象+设置其属性+关联所有事件处理程序);
- 简单属性通过TypeConverter执行字符串值和非字符串属性的关联;
- 复杂属性则通过属性元素语法Property-Element Syntax实现上述功能;
- 标记扩展的原因:是有些情况下,不可能硬编码属性值;
- WPF最常用的标记扩展是支持资源引用的标记扩展和支持数据绑定的标记扩展,格式:{标记扩展类 参数};
- 所有标记扩展都由继承自System.Windows.Markup.MarkupExtension基类的类实现;
- 附加属性是可作用于多个控件但在另一个类中定义的属性(WPF中,一般用于控件的布局);
- 附加属性不是真正的属性,实际上它会被转换为方法调用(DefiningType.SetPropertyName(被修改的对象, 指定的属性值)),格式:定义类型.属性;
- XAML文件是一棵嵌套的元素树;规则:
- 1、如果父元素实现了IList接口,解析器就调用IList.Add()方法,并且为该方法传入子元素作为参数;1、如果父元素实现了IList接口,解析器就调用IList.Add()方法,并且为该方法传入子元素作为参数;
- 2、如果父元素实现了IDictionary接口,解析器就调用IDictionary.Add()方法,并且为该方法传入子元素作为参数。当使用字典集合时,必须设置x:Key特性以便为每个记录指定键名;
- 3、如果父元素使用ContentProperty特性进行修饰,解释器就使用子元素设置对应的属性;
- 特性也可关联事件处理程序,语法为:事件名=“事件处理程序方法名”;
- 使用特性为同一元素设置属性和关联事件处理程序,WPF会首先设置Name属性,然后关联任意事件处理程序,最后设置其它属性。故,在第一次设置属性时,所有对属性变化做出响应的事件处理程序都会触发;
- WPF中使用其他命名空间类型的语法:xmlns:Prefix="clr-namespace:Namespace;assembly=AssemblyName"
-
xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:local="clr-namespace:MyNamespace"
-