目录
第一篇 WPF编程基础 第1章 WPF应用程序 2 1.1 WPF应用程序的创建 2 1.2 Dos窗口 3 1.3 WPF应用程序的启动和终止 4 1.4 输入参数 5 1.5 在Xaml中创建Application 7 1.6 窗口大小 10 1.7 互联网应用程序 10 1.8 应用程序的异常处理 11 1.9 应用程序中的资源 12 1.10 应用程序的发布 13 1.11 WPF开发环境 14 1.12 本章小结 15 第2章 XAML语言 16 2.1 XAML是一种界面描述语言 16 2.2 XAML的根元素 17 2.3 XAML命名空间(NameSpace) 17 2.4 XAML和代码分离技术(code behind) 18 2.5 子元素 19
.2.6 相关属性(Dependency Property) 20 2.7 附加属性(Attached Property) 21 2.8 XAML标记扩展 21 2.8.1 静态资源扩展(StaticResourceExtension) 22 2.8.2 动态资源扩展(DynamicResourceExtension) 23 2.8.3 数据绑定扩展(Binding) 24 2.8.4 相对数据源扩展(RelativeSource) 24 2.8.5 模板绑定(TemplateBinding) 25 2.8.6 x:Type扩展 26 2.8.7 x:Static扩展 26 2.8.8 x:null扩展 26 2.8.9 x:Array扩展 26 2.9 本章小结 27 第3章 WPF排版 28 3.1 排版基础 28 3.2 堆积面板(StackPanel) 29 3.3 WrapPanel 34 3.4 停靠面板(DockPanel) 35 3.5 表格式面板(Grid) 39 3.5.1 设定UI元素在Grid中的位置 40 3.5.2 设定Grid行或列的尺寸 40 3.5.3 元素横跨多个行列时的设定 41 3.5.4 在Grid中保持多行或多列大小的一致性 44 3.6 UniformGrid 46 3.7 画布面板(Canvas) 47 3.8 本章小结 48 第4章 WPF中的属性系统 49 4.1 CLR属性 49 4.2 相关属性的概念 50 4.2.1 相关属性的传递 50 4.2.2 WPF对相关属性的支持 51 4.3 自定义相关属性 52 4.4 附加属性 58 4.5 本章小结 67 第5章 画笔和画刷 68 5.1 WPF中的颜色 68 5.2 画刷 75 5.2.1 实心画刷(SolidColorBrush) 76 5.2.2 梯度画刷(GradientBrush) 77 5.2.3 线性梯度画刷(LinearGradientBrush) 77 5.2.4 圆形梯度画刷(RadialGradientBrush) 80 5.2.5 自制画刷(DrawingBrush) 81 5.2.6 粘贴模式(TileMode) 82 5.2.7 伸展方式(Stretch) 83 5.2.8 图像画刷(ImageBrush) 83 5.2.9 控件画刷(VisualBrush) 85 5.3 画笔 88 5.4 本章小结 95 第二篇 WPF专业程序员必备 第6章 WPF控制 98 6.1 WPF控件概述 98 6.2 内容控件(Content Control) 100 6.2.1 框架控件(Frame) 100 6.2.2 WPF按钮(Button) 101 6.2.3 拨动按钮(ToggleButton) 104 6.2.4 CheckBox控件 104 6.2.5 RadioButton控件 104 6.2.6 重复按钮(RepeatButton) 105 6.2.7 带有标题栏的内容控件(HeaderedContentControl) 106 6.2.8 分组框(GroupBox) 107 6.2.9 伸展控件(Expander) 109 6.2.10 标签控件(Label) 110 6.2.11 为按钮设置热键 111 6.2.12 ToolTip 113 6.2.13 ScrollViewer 115 6.3 条目控件(Items Controls) 116 6.3.1 菜单(Menu) 117 6.3.2 工具条(ToolBar) 123 6.3.3 Selector 126 6.3.4 组合框(ComboBox) 126 6.3.5 TabControl 129 6.3.6 列表框(ListBox) 132 6.3.7 ListView 135 6.3.8 状态条(StatusBar) 138 6.3.9 树形控件TreeView和TreeViewItem 140 6.4 文本控件(Text Controls) 143 6.4.1 口令输入框(PasswordBox) 143 6.4.2 文字输入框(TextBox) 144 6.4.3 RichTextBox 145 6.5 范围控件(Range Controls) 146 6.5.1 滚动条(ScrollBar) 146 6.5.2 滑动条(Slider) 147 6.5.3 进展条(ProgressBar) 152 6.6 本章小结 152 第7章 传递事件和传递命令系统 153 7.1 WPF中的元素树 153 7.2 传递事件(Routed Event) 165 7.2.1 RoutedEventArgs 166 7.2.2 终止事件传播 166 7.2.3 处理传递事件 167 7.2.4 附加传递事件(Attached Routed Event ) 168 7.3 考察传递事件 168 7.3.1 键盘事件的产生和传递 174 7.4 自定义传递事件 174 7.5 管理键盘和鼠标输入事件 182 7.5.1 键盘输入 182 7.5.2 鼠标输入 182 7.6 传递命令 184 7.6.1 ICommand接口 186 7.6.2 ICommandSource接口 186 7.6.3 CommandTarget 186 7.6.4 命令绑定(CommandBinding) 186 7.6.5 传递命令(Routed Command) 187 7.6.6 WPF命令仓库(Command Repository) 187 7.7 本章小结 190 第8章 资源 191 8.1 资源定义及其类型 191 8.2 统一资源标识(Unified Resource Identifier) 192 8.3 .NET开发平台对资源国际化的支持 196 8.3.1 WinForm下的资源管理 197 8.3.2 用XAML创建本地资源 200 8.4 WPF元素中定义的资源 202 8.4.1 静态资源(StaticResource) 203 8.4.2 资源的作用范围 204 8.4.3 静态扩展标识(Static markup extension) 205 8.4.4 动态资源扩展标识(DynamicResource Markup Extension) 208 8.5 本章小结 210 第9章 风格 211 9.1 Style类 211 9.2 Setters 211 9.3 TargetType 215 9.4 BasedOn 218 9.5 触发器(Triggers) 220 9.5.1 使用单一条件的触发器 221 9.5.2 使用多个条件的触发器 222 9.5.3 使用数据触发器(DataTrigger) 223 9.6 风格中的资源 225 9.7 IsSealed 227 9.8 把风格定格定义在单独的文件中 227 9.9 在FrameworkContentElement中使用风格 228 9.10 再谈Setter属性 229 9.11 本章小结 230 第10章 模板 231 10.1 模板概述 231 10.2 控件模板 232 10.2.1 在控件中使用模板 232 10.2.2 在资源中使用模板 234 10.2.3 在控件模板中使用TargetType 235 10.2.4 在模板中显示控件的内容 236 10.2.5 在模板中使用ContentPresenter 237 10.2.6 模板中元素名Name属性 239 10.2.7 在模板中绑定控件的其他属性 239 10.2.8 使用模板显示电力系统的断路器和刀闸开关 240 10.2.9 在风格中使用模板 242 10.2.10 获取WPF控件的模板 243 10.3 数据模板(DataTemplate) 244 10.3.1 我们所面临的问题 244 10.3.2 定义数据模板 247 10.3.3 在资源中使用数据模板 248 10.3.4 数据模板触发器 249 10.3.5 根据数据属性选择相应的模板 250 10.3.6 在数据模板中使用类型转换技术 253 10.4 ItemsPanelTemplate 258 10.5 层次结构数据模板(HierarchicalDataTemplate) 259 10.6 本章小结 262 第11章 数据绑定(Data Binding) 263 11.1 数据绑定概述 263 11.2 最简单的数据绑定——从界面元素到界面元素 264 11.2.1 一对一数据绑定 264 11.2.2 在C#中,实现数据绑定 265 11.2.3 对不是FrameworkElement和FrameworkContentElement元素实现数据绑定 266 11.3 使用不同的绑定模式 266 11.4 动态绑定 267 11.5 最简单的数据绑定——从.NET对象到界面元素 268 11.6 DataContext 271 11.7 控制绑定时刻 272 11.8 开发自己的IValueConverter 273 11.9 在数据绑定中加入校验 275 11.9.1 开发业务规则类 276 11.9.2 在绑定中添加任意多个业务规则 279 11.9.3 在控件上显示校验信息 279 11.9.4 触发错误处理事件 280 11.9.5 清除控件上的错误信息 282 11.10 对集合对象的绑定 283 11.10.1 使用DisplayMemberPath属性 286 11.10.2 显示当前条目 286 11.10.3 遍历集合中的记录 288 11.10.4 增加或删除记录 290 11.10.5 对集合对象分组 293 11.10.6 对集合对象排序 294 11.10.7 对集合对象过滤 295 11.11 数据源 296 11.11.1 XML数据源 296 11.11.2 .NET对象数据源 301 11.12 层次结构数据的绑定 303 11.13 本章小结 303 第12章 窗口对话框和打印 304 12.1 窗口(Window) 304 12.1.1 窗口的状态变化和事件 304 12.1.2 确定视窗的位置 309 12.1.3 确定视窗的大小 310 12.1.4 视窗状态属性(WindowState) 310 12.1.5 视窗大小模式(ResizeMode) 310 12.1.6 视窗风格(WindowStyle) 311 12.2 网页(Page) 311 12.2.1 创建网页 312 12.2.2 KeepAlive属性 312 12.2.3 NavigationService属性 312 12.2.4 ShowsNavigationUI属性 313 12.3 浏览窗口(NavigationWindow) 313 12.3.1 使用统一风格 314 12.3.2 设置NavigationWindow的标题 314 12.3.3 浏览网页 315 12.3.4 使用HyperLink类 315 12.3.5 使用NavigationService转到不同的网页 318 12.3.6 使用浏览日志转换到不同的网页 319 12.3.7 浏览窗口的浏览事件 319 12.4 对话框(DialogBox) 320 12.4.1 消息框(MessageBox) 320 12.4.2 通用对话框 320 12.4.3 自定义对话框 322 12.5 打印输出 323 12.5.1 XPS 文档简介 323 12.5.2 创建XPS文档 324 12.5.3 显示XPS文档 328 12.5.4 打印 333 12.6 本章小结 333 第三篇 图形和动画 第13章 二维图形 336 13.1 WPF图形系统概述 336 13.1.1 统一编程模型 336 13.1.2 坐标系统 338 13.1.3 Shape 和Geometry 338 13.2 Shape及其派生类 339 13.2.1 直线(Line) 340 13.2.2 矩形(Rectangle) 340 13.2.3 椭圆(Ellipse) 341 13.2.4 折线(Polyline) 341 13.2.5 多边形(Polygon) 342 13.2.6 填充规则(FillRule) 342 13.2.7 路径(Path) 343 13.3 Geometry及其派生类 343 13.3.1 直线(LineGeometry) 344 13.3.2 矩形(RectangleGeometry) 344 13.3.3 椭圆(EllipseGeometry) 344 13.3.4 几何图形组(GeometryGroup) 345 13.3.5 合并图形(CombinedGeometry) 346 13.3.6 几何路径(PathGeometry) 348 13.3.7 分段路径(PathSegment) 350 13.3.8 弧线(ArcSegment) 350 13.3.9 直线段(LineSegment) 352 13.3.10 折线段(PolyLineSegment) 353 13.3.11 柏之线(BezierSegment) 353 13.3.12 多段柏之线(PolyBezierSegment) 354 13.3.13 二次柏之线(QuadraticBezierSegment) 354 13.3.14 多段二次柏之线(PolyQuadraticBezierSegment) 355 13.3.15 迷你绘图语言 356 13.3.16 流几何图形(StreamGeometry) 360 13.4 绘制(Drawing) 361 13.4.1 使用DrawingImage显示几何图形 362 13.4.2 使用DrawingVisual来显示几何绘制 363 13.4.3 创建DrawingVisual宿主 363 13.4.4 绘制几何图形 364 13.4.5 把DrawingVisual对象加到FrameworkElement中的视觉树和逻辑树中 364 13.4.6 选择视觉元素(Visual Hit Testing) 366 13.4.7 简单选择判断 366 13.4.8 多个视觉元素的选择判断 367 13.4.9 视觉元素重叠时的选择判断 367 13.5 本章小结 368 第14章 图形转换 369 14.1 图形转换概述 369 14.2 项目管理器 370 14.3 旋转转换(RotateTransform) 376 14.4 位移转换(TranslateTransform) 378 14.5 缩放转换(ScaleTransform) 380 14.6 扭曲转换(SkewTransform) 382 14.7 组合转换(TransformGroup) 384 14.8 矩阵转换(MatrixTransform) 385 14.8.1 矢量操作 385 14.8.2 H坐标系 386 14.8.3 位移转换矩阵 387 14.8.4 旋转转换矩阵 388 14.8.5 缩放转换矩阵 388 14.8.6 扭曲转换矩阵 389 14.8.7 矩阵操作 389 14.9 本章小结 394 第15章 动画 395 15.1 WPF中的动画 395 15.2 动画类继承树 396 15.3 一个简单的动画 397 15.4 控制动画 398 15.4.1 动画所用的时间(duration) 399 15.4.2 设定动画开始时间BeginTime 399 15.4.3 设定自动返回(AutoReverse) 399 15.4.4 设定动画速度(SpeedRatio) 400 15.4.5 加快和减慢动画(AccelarationRatio和DecelarationRatio) 400 15.4.6 设定动画的重复特性(RepeatBehavior) 402 15.4.7 设定动画的终止状态(FillBehavior) 402 15.4.8 设定相关属性的动画范围(From和To) 402 15.4.9 设定相关属性的动画范围(By) 403 15.4.10 设定IsAdditive和IsCumulative 属性 403 15.4.11 WPF动画的时间片类 403 15.5 故事板(Storyboard) 404 15.5.1 使用故事板的一般格式 404 15.5.2 设定Target和TargetName 406 15.5.3 操作Storyboard 406 15.6 KeyFrame 408 15.6.1 线性KeyFrame 409 15.6.2 非线性KeyFrame(Spline KeyFrame) 412 15.6.3 离散KeyFrame(Discrete KeyFrame) 414 15.7 本章小结 416 第四篇 开发WPF产品 第16章 多媒体技术及其应用 418 16.1 播放.wav声音格式的SoudPlayer和SoundPlayerAction 418 16.1.1 装载.wav文件 418 16.1.2 播放.wav文件 419 16.1.3 停止播放 419 16.1.4 在XAML中使用SoundPlayerAction 419 16.2 播放多种格式的声音和图像 420 16.2.1 播放模式 421 16.2.2 使用MediaPlayer实例 422 16.2.3 使用MediaElement和MediaTimeline实例 426 16.3 语音合成和语音识别 430 16.3.1 尝试Windows Vista的语音功能 431 16.3.2 使你的程序发音 432 16.3.3 PromptBuilder和SSML 433 16.3.4 语音识别中的语法 434 16.4 本章小结 436 第17章 定制控件和排版 437 17.1 用户控件和自定义控件 437 17.2 创建用户控件(User Control) 439 17.2.1 设计用户控件UI 439 17.2.2 开发支持用户控件UI的逻辑 442 17.3 创建自定义控件(Custom Control) 446 17.4 创建自定义排版(Custom Panel) 459 17.4.1 照片浏览器 461 17.5 本章小结 471 第18章 综合应用 472 18.1 Ribbon界面概览 472 18.2 项目的组织 473 18.3 管理Generic.XAML文件 475 18.4 开发自定义控件 476 18.4.1 自定义控件间的关系 476 18.4.2 Ribbon按钮 477 18.4.3 Ribbon分组(Group) 483 18.4.4 RibbonTabItem 492 18.4.5 RibbonApplicationMenuItem 493 18.4.6 RibbonApplicationMenu 495 18.4.7 RibbonQAToolBar 496 18.4.8 RibbonBar 497 18.4.9 RibbonWindow 498 18.4.10 支持不同皮肤 514 18.5 使用Ribbon自定义控件实例 516 18.6 本章小结 525 参考文献 526