第1章 程序界面 1
1.1 XAML的原理 1
1.1.1 XAML的概念 1
1.1.2 XAML页面的编译 2
1.1.3 动态加载XAML 3
1.2 XAML的树结构 6
1.2.1 可视化树 6
1.2.2 VisualTreeHelper类 8
1.2.3 遍历可视化树 8
1.2.4 可视化树应用示例:实现ListBox控件分页加载 10
1.3 路由事件 12
1.3.1 Windows Phone事件 12
1.3.2 路由事件的概念 13
1.3.3 路由事件原理 14
1.3.4 路由事件的作用和演示 15
1.4 框架和页面 16
1.4.1 框架页面结构 16
1.4.2 页面导航 17
1.4.3 框架的应用示例:自定义弹出窗口 18
1.5 UI线程 23
第2章 样式和模板 26
2.1 样式 26
2.1.1 创建样式 26
2.1.2 样式继承 28
2.1.3 以编程方式设置样式 29
2.1.4 样式文件 31
2.1.5 系统主题 32
2.1.6 主题资源 33
2.1.7 自定义主题 35
2.2 模板 38
2.2.1 控件模板(ControlTemplate) 38
2.2.2 ContentControl和ContentPresenter 39
2.2.3 视觉状态管理(VisualStatesManager) 40
2.2.4 数据模板(DataTemplate) 43
2.2.5 ItemTemplate、ContentTemplate和DataTemplate 43
2.2.6 数据模板的使用 44
2.2.7 读取和更换数据模板 46
第3章 布局 49
3.1 布局原理 49
3.1.1 布局的意义 49
3.1.2 系统的布局面板 50
3.1.3 布局系统 51
3.1.4 布局系统的重要方法和属性 52
3.1.5 测量和排列的过程 53
3.1.6 多分辨率的适配布局 57
3.2 自定义布局规则 59
3.2.1 创建布局类 59
3.2.2 实现测量过程 60
3.2.3 实现排列过程 61
3.2.4 应用布局规则 62
第4章 图形 64
4.1 图形原理 64
4.1.1 图形中常用的结构 64
4.1.2 画图相关的类 65
4.1.3 基础的图形形状 67
4.2 Path图形 70
4.2.1 两种Path图形的创建方法 70
4.2.2 使用简单的几何图形来创建Path 70
4.2.3 使用PathGeometry来创建Path 73
4.2.4 使用路径标记语法创建Path 77
4.2.5 使用Path实现自定义图形 80
4.2.6 利用Expression Blend工具创建Path图形 82
4.3 画刷 86
4.3.1 SolidColorBrush画刷 86
4.3.2 LinearGradientBrush画刷 86
4.3.3 ImageBrush画刷 87
4.4 图形裁剪 88
4.4.1 使用几何图形进行剪裁 88
4.4.2 对布局区域进行剪裁 89
第5章 图表 92
5.1 动态生成折线图和区域图 92
5.1.1 折线图和区域图原理 92
5.1.2 生成图形逻辑封装 94
5.2 实现饼图控件 98
5.2.1 自定义饼图片形形状 98
5.2.2 封装饼图控件 104
5.3 线性报表 108
5.3.1 实现图形表格和坐标轴 108
5.3.2 定义线性数据图形类 114
5.3.3 实现图例 117
5.3.4 实现线性报表 119
5.4 QuickCharts图表控件库 121
5.4.1 QuickCharts项目结构分析 122
5.4.2 饼图图表PieChart的实现逻辑 124
5.4.3 连续图形图表SerialChart的实现逻辑 128
第6章 变换特效和三维特效 132
6.1 变换特效 132
6.1.1 变换的原理二维变换矩阵 132
6.1.2 平移变换(TranslateTransform) 134
6.1.3 旋转变换(RotateTransform) 134
6.1.4 缩放变换(SealeTransform) 135
6.1.5 扭曲变换(SkewTransform) 136
6.1.6 组合变换(TransformGroup) 137
6.1.7 矩阵变换(MatrixTransform) 138
6.2 三维特效 141
6.2.1 三维坐标体系 141
6.2.2 三维旋转 141
6.2.3 三维平移 144
6.2.4 用矩阵实现三维特效 147
第7章 动画 151
7.1 动画原理 151
7.1.1 理解动画 151
7.1.2 动画的目标属性 152
7.1.3 动画的类型 153
7.2 线性插值动画 154
7.2.1 动画的基本语法 154
7.2.2 线性动画的基本语法 155
7.2.3 DoubleAnimation实现变换动画 159
7.2.4 ColorAnimation实现颜色渐变动画 160
7.2.5 PointAnimation实现Path图形动画 162
7.3 关键帧动画 163
7.3.1 关键帧动画概述 164
7.3.2 线性关键帧 165
7.3.3 样条关键帧 167
7.3.4 离散关键帧 171
7.4 缓动函数动画 176
7.4.1 缓动函数动画概述 177
7.4.2 BackEase动画 177
7.4.3 BounceEase动画 179
7.4.4 CircleEase动画 181
7.4.5 CubicEase动画 183
7.4.6 ElasticEase动画 185
7.4.7 ExponentialEase动画 187
7.4.8 PowerEase/QuadraticEase/QuarticEase/QuinticEase动画 189
7.4.9 SineEase动画 191
7.5 基于帧动画 193
7.5.1 基于帧动画的原理 193
7.5.2 基于帧动画的应用场景 194
7.5.3 基于帧动画的实现 194
第8章 动画进阶 197
8.1 动画方案的选择 197
8.1.1 帧速率 197
8.1.2 UI线程和构图线程 199
8.1.3 选择最优的动画方案 200
8.2 列表动画 202
8.2.1 实现的思路 202
8.2.2 使用附加属性控制动画对象 203
8.2.3 列表切换缓动动画实现 204
8.2.4 退出页面的三维动画实现 208
8.2.5 列表动画的演示 209
8.3 模拟实现微信的彩蛋动画 212
8.3.1 实现的思路 212
8.3.2 星星创建工厂 213
8.3.3 实现单个星星的动画轨迹 218
8.3.4 封装批量星星飘落的逻辑 220
8.3.5 星星飘落动画演示 222
8.4 决斗游戏动画 224
8.4.1 实现的思路 224
8.4.2 初始页面的布局 224
8.4.3 人物走路动画 227
8.4.4 决斗开枪动画 229
第9章 控件编程 231
9.1 系统控件原理解析 231
9.1.1 系统控件分类 231
9.1.2 系统控件的默认样式 234
9.1.3 深度改造系统控件 237
9.2 UserControl自定义控件——水印输入框控件 239
9.2.1 UserControl自定义控件的原理 239
9.2.2 创建水印输入框控件 240
9.2.3 添加水印输入框控件属性和事件的处理 241
9.2.4 使用水印输入框控件 243
9.3 从控件基类派生实现自定义控件——全屏进度条控件 244
9.3.1 创建控件样式 244
9.3.2 加载样式 245
9.3.3 全屏进度条的打开和关闭 248
9.3.4 处理物理返回事件 250
9.3.5 全屏进度条控件的使用 251
第10章 Expression Blend工具 253
10.1 Expression Blend概述 253
10.1.1 视图 254
10.1.2 工作区 255
10.2 主要的面板 255
10.2.1 美工板 256
10.2.2 资产面板 256
10.2.3 工具面板 257
10.2.4 对象和时间线面板 258
10.2.5 属性面板 259
10.3 Expression Blend for Windows Phone的特色功能 262
10.3.1 选择设备的效果 262
10.3.2 预览Windows Phone样式 263
10.3.3 定义应用程序菜单栏 263
10.4 Expression Blend绘图 265
10.4.1 绘图基础 265
10.4.2 使用“笔”绘制路径 266
10.4.3 合并路径 267
10.4.4 实例演练——绘制一个表情图形 268
10.5 Expression Blend制作动画 272
10.5.1 情节提要 273
10.5.2 时间线 274
10.5.3 Expression Blend的关键帧 274
10.5.4 实例演练——制作小球掉落反弹动画 275
第11章 列表 280
11.1 列表控件的使用 280
11.1.1 ItemsControl实现最简洁的列表 280
11.1.2 ListBox实现下拉单击刷新列表 283
11.1.3 ListView实现下拉自动刷新列表 286
11.1.4 GridView实现网格列表 289
11.1.5 SemanticZoom实现分组列表 290
11.2 虚拟化技术 295
11.2.1 列表的虚拟化 295
11.2.2 VirtualizingStackPanel、ItemsStackPanel和ItemsWrapGrid虚拟化排列布局控件 297
11.2.3 实现横向虚拟化布局 299
11.2.4 大数据量网络图片列表的异步加载和内存优化 301
第12章 Toolkit控件库 306
12.1 Toolkit控件库项目简介 306
12.2 CustomMessageBox控件原理解析 307
12.2.1 CustomMessageBox的调用逻辑 307
12.2.2 CustomMessageBox的样式和弱引用的使用 309
12.3 PhoneTextBox控件原理解析 310
12.3.1 PhoneTextBox的调用逻辑 311
12.3.2 PhoneTextBox的封装逻辑 311
12.4 ToggleSwitch控件原理解析 313
12.4.1 ToggleSwitch的调用逻辑 313
12.4.2 ToggleSwiteh和1oggleSwitchButton的样式 314
12.4.3 ToggleSwitch对拖曳手势的判断 316
12.5 ListPicker控件原理解析 318
12.5.1 ListPicker的调用逻辑 318
12.5.2 ListPicker控件主要逻辑的分析 320
12.6 WrapPanel控件原理解析 323
12.6.1 WrapPanel控件的调用逻辑 323
12.6.2 WrapPanel布局控件的测量排列逻辑 323