最近学习win8开发,偶然发现同事桌上一本《深入浅出WPF》就随手翻看了几页,发现此书非一般,全是讲的WPF的实现原理,
给我这个学习Silverlight半知半解的人来说,看了之后豁然开朗。真是相见恨晚呀!对于正在学习Windows Phone和Win8开发的同伴来说 这绝对是本难得的好书。
现在就把个人在学习这本书所做的笔记总结拿出来和大家分享下 与大家一同交流学习。
第一章 XAML 概览
1、事件驱动模型:界面操作触发一个事件,然后在事件处理器(函数或方法)中处理数据和调用别的方法,(界面通过事件控制数据)。
数据驱动模型:当数据发生变化的时候主动去通知界面,告知界面重新展示数据,界面控件对数据的修改直接送达数据,(数据通过Data Binding控制界面)。
第二章 从零起步认识XAML
1、在XAML中引入命名空间
a、xmlns[:可选的映射前缀]="clr-namespace:命名空间;assembly=程序集(类似在后台代码中添加引用dll)"(如果没有添加映射前最 就是默认命名空间只能有一个)
b、在每一个XAML文件上面的程序及引入命名空间中可以看到一些URL,它们不是URL,它们是XAML硬性规定的编码,当XAML的编码解析器看到这些固定的字符串的
时候,会自动将一系列的必要程序集(assembly)和命名空间(clr-namespace)引入进来。
第三章 系统学习XAML语法
1、WPF的类库中提供了VisualTreeHelper和LogicalTreeHelper来对XAML树形结构访问查找元素、获取父子节点等
2、TypeConverter在一些赋值转换中使用,
3、XAML是一种声明式的语言,XAML编译器为每一个标签创建一个与之对应的一个对象。XAML为对象属性赋值有两种方法:
a、直接在标签内容中使用字符串赋值(内置转换器进行转换,不能实现的使用TypeConverter)
b、使用属性元素进行复杂赋值,
4、属性元素:某个标签的一个元素对应这个标签的一个属性,即以元素的形式来表达一个实例的属性,
<TextBox FontSize=20>
<TextBox.Text>
这样子写就是属性元素的写法
</TextBox.Text>
</TextBox >
5、标记扩展:一种特殊的Attribute=value的语法,特殊的是value用一对{}包含
Text={Binding Path=value,ElementName=slider1} (类似C# 3.0里面的对象初始化语法)
a、标记扩展也是对属性的赋值所以可以与属性元素相互转换
b、只有MarkupExtention类的派生类才能使用标记扩展来创建对象
c、标记扩展可以嵌套
Text={Binding Sourse={StaticResource myDataSourse},Path=PersonName}
d、标记扩展有一些简写语法
{Binding Value,...}与{Binding Path=Value,...}; {StaticResource myString,...}与{StaticResource ResourceKey=myString,...}
上面两组的效果都是一样的,两组前面的写法称为固定位置参数(必须按照构造函数的位置填写一一对应),后者叫具名参数
6、在XAML中添加后台处理代码<x:code><![CDATA[在这里添加代码]]></x:code>
第四章 x名称空间详解
1、x名称空间映射的是 http://schemas.microsoft.com/winfx/2006/xaml, 它包含的类均与解析XAML有关
2、x:class:这个Attribute的作用是告诉XAML编译器将XAML标签的编译结果与后台的代码中指定的类合并
注:a、这个 Attribute 只能用于根节点(类标签)
b、它的值所指示的类型必须使用partial关键字定义
3、x:ClassModifier:这个Attribute的作用是告诉XAML编译由标签编译生成的类具有怎样的访问权限
注:a、被使用的标签必须要有小x:class 特性 (即只能使用在类标签(根节点))
4、x:Name:是用来创建引用变量的,以便后台代码可以直接通过引用变量来访问实例
到底使用Name还是使用x:Name??(Name属性是定义在FrameworkELement类中的,这个类是WPF控件的基类,所有控件都有这个属性,
使用这两个的效果是一样,如果一个标签没有对应的Name属性就只能使用x:Name)
5、x:FieldModifier:限制字段的访问权限
6、x:Key:为资源(Resource Key--Value的形式)贴上用于检索的索引
<Windows.Resources>
<sys:String x:Key="myString">我的资源</sys:String>
</Windows.Resources>
7、x:Shared:标记资源是检索到的同一个对象(true)还是对象的副本(false)
8、x:Type:用于表达某个数据类型(它是标记扩展,貌似在win8开发中没有)
9、x:Null:用于设置空值
10、x:Array:通过他的Items属性向使用者暴露一个类型已知的ArrayList实例(Win8开发貌似也没有)
11、x:Static:在XAML文档中使用数据类型的Static成员(貌似还是没有)
12、XAML指令元素只有两个x:Code和x:XData
第五章 控件与布局
1、逻辑树(Logical Tree):如果不考虑控件内部的组成结构,只考虑由控件组成的树,那么这棵树叫作逻辑树
可视元素树(Visual Tree):如果连控件本身的树也考虑在内,则这棵比逻辑树更繁茂的树称为可视元素树。
2、内容属性:控件通过自己的某个属性引用着作为其内容的对象。
3、WPF的UI元素的类型
4、ContentControl族:
均派生子ContentControl类
他们都是控件,并且内容属性的名称为Content
只能由单一元素充当其内容 (即内容属性里面只能有一个元素,但是可以用其他可包含元素包含多个元素)
5、HeaderedContentControl族
继承ContentControl
包含两个内容属性Content和Header,但都只能容纳一个元素
6、ItemsControl族
均派生自ItemsControl类,用于显示列表化的数据。
内容属性为Items或ItemsSource
每种ItemsControl都对应有自己的条目容器(Item Container)
7、HeaderedItemsControl族
多了一个Header内容属性
包括 MenuItem、TreeViewItem、ToolBar
8、Decorator族
在UI上起装饰的效果
内容属性为Child,并且只能由单一元素充当其内容
9、TextBlock和TextBox族
10、Shape族
用于画2D图形使用Fill属性为他们填充效果,Stroke设置边线的效果。没有内容属性
11、Panel族
用于布局
内容属性为Children,内容可以有多个元素。
12、UI布局
Grid、StackPanel、Canvas、DockPanel、WrapPanel
绝对值:double数值加单位后缀,
比例值:double数值后面加上(*),解析器会把所有比例值的数值加起来作为分母,把每个比例值作分子再用这个值乘以未被占用的空间
自动值:Auto,最终值由控件内的实际值决定