编辑推荐
本书通过大量案例展示WPF的设计思想。案例组织采用分层递进叠加的方式,程序从小变大、由易到难,帮助读者迅速掌握写程序的思想路径。
内容简介
本书从WPF技术的设计原则出发,介绍WPF中XAML的语法结构、布局方式、常用控件、数据驱动UI的理念、路由事件、图形基础、动画与媒体、动作原则、资源与样式及MVVM设计模式,并通过大量的案例向读者展示WPF的设计思想。案例组织采用分层递进叠加方式,让程序从小变大,由易到难,能够使读者迅速地熟悉编写程序的思想路径,体会到编写程序的乐趣。每章配有习题,以启发读者深入地学习WPF技术。
本书既可作为高等学校计算机专业UI设计、软件开发、人机交互技术等课程的教材,也可作为计算机从业人员的参考书。
目录
目录
第1章引言
1.1全新的图形用户系统
1.2XAML编程模型
1.2.1HTML
1.2.2XAML
1.3WPF特性
1.3.1布局与控件
1.3.2数据集成及处理能力
1.4WPF体系结构
1.4.1WPF运行机制
1.4.2WPF类层次结构
1.4.3WPF的可视化树与逻辑树
1.5WPF与UWP
1.6小结
习题与实验1
第2章XAML
2.1XAML文档框架
2.1.1XAML文档结构
2.1.2基础语法
2.2XAML中的属性
2.2.1简单属性
2.2.2复杂属性
2.2.3附加属性
2.2.4处理特殊字符与空白
2.3XAML名称空间
2.3.1名称空间的作用
2.3.2默认名称空间
2.3.3名称空间中的标记扩展
2.4类型转换器
2.5导入程序集
2.6小结
习题与实验2
第3章布局
3.1布局原则
3.1.1合成布局模型
3.1.2布局机制
3.1.3布局通用属性
3.2布局面板
3.2.1Canvas
3.2.2DockPanel
3.2.3StackPanel
3.2.4WrapPanel
3.2.5UniformGrid
3.3Grid
3.3.1从结构中分离布局
3.3.2尺寸模型
3.3.3共享尺寸组
3.3.4跨越行和列
3.3.5GridSplitter
3.4小结
习题与实验3
第4章控件
4.1WPF控件新理念
4.1.1内容模型
4.1.2模板
4.2菜单、工具栏和状态栏
4.2.1Menu
4.2.2ToolBar
4.2.3StatusBar
4.3容器控件
4.3.1Expander
4.3.2GroupBox
4.3.3TabControl
4.4范围控件
4.4.1Slider
4.4.2ScrollBar
4.4.3ProgressBar
4.5文本编辑器控件
4.5.1文本模型
4.5.2PasswordBox
4.5.3TextBox与RichTextBox
4.5.4InkCanvas
4.6列表控件
4.6.1ListBox和ComboBox
4.6.2ListView
4.6.3TreeView
4.7构建控件
4.7.1ToolTip
4.7.2Thumb
4.7.3Border
4.7.4Popup
4.7.5ScrollViewer
4.7.6Viewbox
4.8日期控件
4.8.1Calendar
4.8.2DatePicker
4.9按钮
4.10小结
习题与实验4
第5章数据
5.1数据驱动模型
5.1.1数据原则
5.1.2资源
5.2数据绑定原理
5.2.1数据绑定机制
5.2.2数据源与路径
5.2.3值转换机制
5.2.4数据绑定模型
5.3数据绑定用法
5.3.1控件间的绑定
5.3.2控件绑定资源文件值
5.3.3属性变更通知接口
5.3.4绑定到列表框
5.4小结
习题与实验5
第6章路由事件
6.1消息机制
6.1.1消息的运行机制
6.1.2事件模型
6.2路由事件原理
6.2.1路由事件机制
6.2.2RoutedEventArgs类
6.2.3路由策略
6.3自定义路由事件
6.4附加事件
6.5小结
习题与实验6
第7章图形基础
7.1WPF图形原则
7.1.1几何图形与笔刷
7.1.2绘制图画
7.22D图形
7.2.1形状
7.2.2图像
7.2.3WPF图像特效
7.33D图形
7.3.1WPF坐标系
7.3.2模型
7.3.3材质
7.3.4光源与照相机
7.3.5变换
7.4小结
习题与实验7
第8章动画与媒体
8.1动画基础
8.1.1动画的概念
8.1.2动画的原理
8.1.3传统动画与WPF动画
8.2动画类型
8.2.1线性插值动画
8.2.2关键帧动画
8.2.3路径动画
8.3集成动画
8.3.1与控件模板集成
8.3.2与文本类型集成
8.4媒体
8.4.1音频
8.4.2视频
8.5小结
习题与实验8
精彩书摘
WPF布局是通过面板(Panel)对页面元素进行全面规划和安排。简单地说,就是把一些控件有条理地摆放在界面上合适的位置。在应用程序界面设计中,合理的元素布局至关重要,它可以方便用户操作,并用清晰的页面逻辑呈现用户信息。如果内置布局控件不能满足需要,用户还可以创建自定义的布局元素。
3.1布局原则
WinForm的布局是采用基于坐标的方式,当窗口内容发生变化时,里面的控件不会随之动态调整,用户体验不够好。而WPF采用了基于流的布局方式,像Web开发模式。流式布局特点是:所有的元素总是默认地自动向左上角靠近,在设计时,通过控制元素相对位置的方式使其达到预计的效果,即元素的位置依赖于相邻元素的位置和尺寸。
3.1.1合成布局模型
WPF的合成布局模型是用来满足广泛的应用场景布局,允许某种布局控件被嵌套在其他布局控件中。合成布局模型通过布局契约来实现子控件和父布局控件间的通信问题。布局契约包括两种设计思想,即根据内容调整尺寸和两段布局。
1.根据内容调整尺寸
根据内容调整尺寸,即每个控件都根据内容来确定控件大小,这个设计思想应用于UI中的所有控件。例如,窗口能够调整大小来适应它们内部的控件,文本框控件能调整尺寸来适应它内部的文本。当然每个元素会被询问其期望的尺寸大小,以确保根据内容调整尺寸的设计思想能够实施。
2.两段布局
两段布局是指在两个完全不同的阶段来确定控件的最佳尺寸。在这两个阶段布局模型让父布局控件和子控件达成元素最后尺寸的约定。两个阶段分别是测量(Measure)和排列(Arrange)。测量阶段需要做的主要工作是:对整个UI页面的检测,并询问每个元素的期望尺寸(DesiredSize),元素返回一个可用的尺寸(AvailableSize),当所有的元素都被询问并测量好以后,就进入到排列阶段。在排列阶段,父元素通知每个子元素的实际尺寸(ActualSize)和位置。
在两段布局中,父元素和子元素需要协商出需要的尺寸大小,涉及可用尺寸、期望尺寸、实际尺寸,在此辨析3个尺寸。其中,可用尺寸是测量阶段的初始约束值,即父元素愿意给子元素的最大空间值;期望尺寸是子元素想要的尺寸;实际尺寸是父元素分配给子元素的最终尺寸。这3个尺寸要符合下面的不等式条件。
DesiredSize≤ActualSize≤AvailableSize
了解WPF合成布局模型,学习WPF布局机制,才能理解合成布局模型的来龙去脉,在页面布局时做到得心应手。
3.1.2布局机制
WPF界面上的每个元素的边界框尺寸和排列是WPF自动计算出来的。通过WPF合成布局模型的学习,了解WPF渲染布局的过程中,执行测量(Measure)和排列(Arrange)两个步骤。在布局机制中,详细分解在WPF布局的不同阶段,后台类的调用过程。在测量阶段,布局容器遍历所有子元素,并询问子元素所期望的尺寸;在排列阶段,布局控件在合适的位置放置子元素,并设置元素的最终尺寸;这是一个递归的过程,界面中任何一个容器元素都会被遍历到。
因为面板可以嵌套,所以处理过程是递归的,布局(Layout)处理的过程如图3.1所示。
图3.1WPF布局原理
在此,简要说明WPF布局处理过程。由WPF框架可知,所有UI元素的根元素是UIElement类型,在UIElement中定义了一些基本的关于UI显示的属性(如Clip和Visibility)。在UIElement.Measure(SizeavailableSize)方法执行阶段,就是对这些基本属性做评估,获得适合的Size。同样,FrameworkElement.MeasureCore(SizeavailableSize)方法评估时,在FrameworkElement中定义且有可能影响UI布局的属性,得出更适合的Size。这个Size将被传递给FrameworkElement.MeasureOverride(SizeavailableSize)方法。WPF提供的Panel类型(如Grid)中就会重写该方法来处理,处理完后将得到一个系统期望的Size(称为DesiredSize)。布局系统将按照这个Size来显示该Element,测量(Measure)阶段结束。Size确定后,把Size包装为Rect实例,传递给UIElement.Arrange(RectfinalRect),进行排列(Arrange)处理。根据Size值,Arrange方法为元素创建边界框,边框打包到Rect实例,传给FrameworkElement.ArrangeCore(RectfinalRect)方法。ArrangeCore将继续评估DesiredSize,计算边界留白(Margin,Padding)等信息,获得ArrangeSize,并传给FrameworkElement.ArrangeOverride(SizefinalSize)。这个方法也是可重写的,WPF提供的Panel类型会重写该方法来处理,最终获得finalSize。当finalSize确定后,ArrangeOverride执行完毕,控制权回到ArrangeCore方法,ArrangeCore把该Element放到它的边界框中。到此,该Element的Layout处理完成。
……
前言/序言
前言
WPF(WindowsPresentationFoundation)是专门用来编写程序表示层的技术和工具。它是微软新一代图形展示系统,是用户界面技术进步的重要标志。使用WPF编写的程序比之前的WinForm程序更加简洁清晰。WPF技术适用于微软平台下的桌面系统、浏览器、WindowsPhone的开发。因为微软程序的开发理念都一样,仅在类库方面有一些差别。
本书详细介绍WPF中XAML的语法结构、布局方式、常用控件、数据驱动UI的理念、路由事件、图形基础、动画与媒体、动作原则、资源与样式及MVVM设计模式,并通过大量的案例向读者展示WPF的设计思想。案例组织采用分层递进叠加方式,让程序从小变大,由易到难,能够使读者迅速地熟悉编写程序的思想路径,体会到编写程序的乐趣。全书共12章,前4章是有关WPF基础的编程内容和界面UI设计,从第5章开始是WPF的高级进阶。各章内容概述如下。
第1章介绍WPF的编程机制。采用逐层深入的Button案例,讲解WPF平台特性。通过对WPF的运行机制及类层次结构讲解,从而认识WPF的体系结构。
第2章介绍XAML可扩展的应用程序声明式语言的树形结构、复杂属性、附加属性、xmlns指令和名称空间中的标记扩展等。
第3章详细介绍WPF布局原则及各布局面板的适用场合。重点说明Grid从结构中分离布局、尺寸模型、共享尺寸组、跨越行列等特征,并演示了Grid的多种用法。
第4章介绍WPF控件内容模型和模板的新概念。重点说明元素合成、富内容和简单的编程模型的控件原则。在此基础上,学习WPF的内置控件。
第5章介绍数据驱动模型、数据绑定原理及数据绑定的用法。
第6章从Windows操作系统的消息机制出发,介绍事件模型。在WPF中引入路由事件机制,可采用冒泡、隧道、直接3种策略。
第7章从常用的几何图形元素出发,介绍绘制图画、2D形状及属性,让读者进一步认识WPF3D三维空间坐标系、模型、材质、光源、照相机和变换。
第8章介绍动画工作原理。WPF动画根据计算机的性能和当前进程的繁忙程度,尽可能地增大帧率,比传统动画流畅,实现方式简捷。同时还介绍WPF中动画的常用类型、集成方式和对音频与视频文件的播放方式。
第9章介绍动作使用原则、命令系统及触发器使用方式。
第10章介绍资源的定义、资源类型、适用范围、资源的静态与动态引用方式。特别强调资源字典要遵循“先创建后使用”的规则。
第11章重点介绍样式的构成、如何使用样式及模板,并演示WPF实现换肤的操作步骤。
第12章介绍软件设计模式的起源、概念和原则。对比MVC、MVP和MVVM3种设计模式的通信方式的差别,重点讲解MVVM设计模式的框架、其三大组件内容结构,用基于MVVM模式的计算器案例证明WPF数据驱动UI的设计思想。
本书由刘晋钢主编,其中第1、4、12章由刘晋钢编写,第2、3章由熊风光编写,第6、7章由况立群编写,第8、9章由刘晋霞编写,第10、11章由张麟华编写,第5章由李丽编写。
本书既可作为高等学校计算机专业学生用书,也可作为计算机从业人员的参考书。作为教材,本书既适用于计算机专业UI设计、软件开发、人机交互技术等课程,也可供职业技术学院计算机专业学生使用。通过本书的学习,读者可以掌握WPF的核心技术,提升程序设计能力,为以后的工作和研究打下坚实的基础。
读者可在清华大学出版社网站(www.tup.com.cn)免费下载本书所有案例的源代码、与本书配套的电子课件以及习题参考答案。使用本书时,遇到资源下载问题,请联系责任编辑fuhy@tup.tsinghua.edu.cn或联系本书作者84161924@qq.com。
在此,特别感谢刘子民对本书提供的技术支持和帮助,也感谢本书的责任编辑付弘宇对本书所做的审核工作。由于编者的水平有限,书中难免存在不足之处,恳请广大读者批评指正。
教学建议
根据突出应用的原则,从应用层次要求角度考虑,可把“WPF编程基础”课程的教学内容分为基础学习内容、高级进阶内容和提升应用研发能力三部分。
基础学习:本书的前4章内容是有关WPF基础的编程内容和界面UI设计。详细介绍WPF中XAML的语法结构、布局方式和常用控件,涵盖WPF的新特性、体系结构、XAML基础语法知识、XAML文档的树形结构和常用属性,以及WPF布局原则及布局面板、WPF控件模型、模板及常用控件。学完前4章,读者可以做出赏心悦目的用户界面。
高级进阶:本书的第5章到第9章是WPF的高级进阶。详细介绍数据驱动UI的理念、图形基础、动画与媒体和动作原则。这部分内容涉及WPF的核心技术,将事件驱动模型提升到数据驱动UI的理念上来,让UI与业务逻辑真正地分离,并使前台的设计师和后台的程序员各司其职。
提升应用:本书的第10章到第12章是提升学生应用能力部分。详细介绍资源的类型、引用方式、资源字典、样式的构成、使用样式的方法、模板及MVVM设计模式。目前学生开发的不少项目多半都废弃,究其原因主要是,资源分配不合理,样式不美观,没有采用好的设计模式。这部分内容针对上述问题编写,以提高学生的应用研发能力。
本书用于教学的建议如表1所示。
表1教学建议
课程名
(授课对象)WPF编程基础(授课对象可以是计算机科学与技术、软件工程等专业理工类四年制本科)48学时。注:三年制专科可参考此计划适当修改(例如,可延长到64学时,难度适当降低)
教学目的和要求掌握WPF核心技术、体系结构、数据驱动UI的设计思想及MVVM设计模式,为提升程序开发能力奠定基础
续表
必要的先修课程数据结构、操作系统和面向对象程序设计语言(如C#)
后续可开设实践课程WPF项目实训、基于Kinect的体感设计及手势识别项目研发
章次(学时)要求学生了解内容要求学生掌握内容实践操作项目
第1章引言(2)WPF的地位、体系结构及应用前景WPF的新特性,布局与控件中涉及的容器控件的简单用法数据集成处理能力章节中的Button导出的案例
第2章XAML(2)XAML与HTML的异同点、XAML文档的树形结构XAML的名称空间及属性、类型转换器的用法仿类型转换器中案例,重做一个将字符串转换成对象实例
第3章布局(4)合成布局模型、布局机制、布局常用属性布局面板的用法,布局嵌套生活中常见的布局应用(聊天室、Web等)
第4章控件(4)元素合成、富内容和简单的编程模型的控件原则WPF控件的基本用法、构建控件的思想、用户自定义控件图标设计、登录用户页面、游戏初始化页面、桌面、主题页面等
第5章数据(6)数据模型的发展过程及微软曾用过的数据模型数据绑定机制、值转换机制、数据绑定模型、数据绑定用法INotifyPropertyChanged接口调用、数据绑定列表框
第6章路由事件(6)消息概念、消息循环、Windows编程原理、附加事件路由事件工作机制、RoutedEventArgs类、路由策略实现自定义路由事件,分别采用隧道、冒泡和直接3种策略
第7章图形基础(4)常用几何图形、在WPF3D中的基本概念,包括WPF的坐标系、各种光源和照相机的工作原理WPF图像特效、绘制图画、控件与形状组合、常用变换使用MeshGeometry3D定义模型,创建三维物体
第8章动画与媒体
(2)动画的概念、原理,传统动画与WPF动画异同点线性插值动画、关键帧动画、路径动画,动画集成设计简单的动画
第9章动作(6)动作原则、命令系统的基本元素及元素间的关系、WPF命令库使用各种触发器、命令与数据绑定实现Windows记事本功能
第10章资源(4)资源的定义、资源的类型、资源的可用范围、使用资源的意义资源的静态引用与动态引用方式、创建和使用资源字典使用资源字典
第11章样式(4)样式的作用定制模板、使用样式的方法设置主题、锁屏、更换壁纸(皮肤)
第12章MVVM设计模式(4)软件设计模式的概念、原则、由来,MVC、MVP和MVVM发展过程MVVM设计模式的框架及其三大组件内容结构及该模式的优点完成基于MVVM的简单计算器,并为该计算器的按钮设计统一风格的样式
编者
2018年1月
WPF编程基础/面向“工程教育认证”计算机系列课程规划教材 下载 mobi epub pdf txt 电子书 格式