WPF

发布时间:2011-12-27 11:36:08

一、WPF介绍

WPF是一种NET Framework类型,可用于创建Windows客户端应用程序的可观外观。它包括许多功能,如可扩展应用程序标记语言(XAML)、控件、数据绑定、布局、二维和三维图形、动画、样式、模板、文档、媒体、文本和版式等。

提供更佳的用户体验,用来开发Windows Forms程序以及流览器应用程序

.NET Framework.3.5中,对WPF有许多改进,包括版本控制,应用程序模型,数据绑定,控件,文档,批注和三维UI元素。

WPFWindows Presentation Foundation)是微软推出的基于Windows Vista的用户界面框架,属于.NET Framework 3.0的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。

简介

  WPFWindows Presentation Foundation的缩写 ,其原来代号为“Avalon”,因我佩服拼音首字母组合一样,国内有人调侃地称之为我佩服WPF微软新一代图形系统,运行在.NET Framework 3.0架构下,为用户界面、2D/3D 图形、文档和媒体提供了统一的描述和操作方法。基于DirectX 9/10技术的WPF不仅带来了前所未有的3D界面,而且其图形向量渲染引擎也大大改进了传统的2D界面,比如Vista中的半透明效果的窗体等都得益于WPF 程序员在WPF的帮助下,要开发出媲美Mac程序的酷炫界面已不再是遥不可及的奢望。 WPF相对于Windows客户端的开发来说,向前跨出了巨大的一步,它提供了超丰富的.NET UI 框架,集成了矢量图形,丰富的流动文字支持flow text support3D视觉效果和强大无比的控件模型框架。

Windows Presentation Foundation

Windows Presentation Foundation(以前的代号为“Avalon”)是 Microsoft 用于 Windows 的统一显示子系统,它通过 WinFX 公开。它由显示引擎和托管代码框架组成。Windows Presentation Foundation 统一了 Windows 创建、显示和操作文档、媒体和用户界面 (UI) 的方式,使开发人员和设计人员可以创建更好的视觉效果、不同的用户体验。

Windows Presentation Foundation 发布后(计划在 2006 年),Windows XPWindows Server 2003 和以后所有的 Windows 操作系统版本都可以使用它。   

Windows Presentation Foundation 由两个主要部分组成:引擎和编程框架。   

Windows Presentation Foundation 引擎

Windows Presentation Foundation 引擎统一了开发人员和设计人员体验文档、媒体和 UI 的方式,为基于浏览器的体验、基于窗体的应用程序、图形、视频、音频和文档提供了一个单一的运行时库。Windows Presentation Foundation 使得应用程序不仅能够充分利用现代计算机中现有的图形硬件的全部功能,而且能够利用硬件将来的进步。例如,Windows Presentation Foundation 的基于矢量的呈现引擎使应用程序可以灵活地利用高 DPI 监视器,而无需开发人员或用户进行额外的工作。 同样,当 Windows Presentation Foundation 检测到支持硬件加速的视频卡时,它将利用硬件加速功能。   

Windows Presentation Foundation 框架

Windows Presentation Foundation 框架为媒体、用户界面设计和文档提供的解决方案远远超过开发人员现在所拥有的。Windows Presentation Foundation 的设计考虑了可扩展性,使开发人员可以完全在 Windows Presentation Foundation 引擎的基础上创建自己的控件,也可以通过对现有 Windows Presentation Foundation 控件进行再分类来创建自己的控件。Windows Presentation Foundation 框架的核心是用于形状、文档、图像、视频、动画、三维以及用于放置控件和内容的面板的一系列控件。这些自有控件为开发下一代用户体验提供了构造块。   

Microsoft 在引入 Windows Presentation Foundation 的同时,还引入了 XAML,这是一种公开表示 Windows 应用程序用户界面的标记语言,可使开发人员和设计人员用来构建和重用 UI 的工具更加丰富。对于 Web 开发人员,XAML 提供了熟悉的 UI 说明模式。XAML 还使 UI 设计从基础代码中分离出来,从而使开发人员和设计人员之间的合作更加紧密。

选择理由

为什么选择 Windows Presentation Foundation

对于企业,Windows Presentation Foundation 实现了改进的客户关系和不同的应用程序。通过提供能够快速提供更好的视觉效果、独特的用户体验的技术,来建立与客户的密切关系,使企业可以建立稳定的数字客户关系和独特的品牌化机会。而且,由于 Windows Presentation Foundation 是窗体、文档、视频、三维以及其他功能的综合,因此企业可以创建持久的用户体验解决方案,并集成到客户的日常活动中。

对于开发人员和设计人员,Windows Presentation Foundation 提供了统一的 UI 平台,因此他们只需学习一个模式,就可以获得无限可能的 UI 体验。对于 .NET 开发人员,其框架是熟悉的,并且它最终将减少提供最佳用户体验和通信逻辑所需的代码行数。对于设计人员,Windows Presentation Foundation 提供的平台可消除内容、媒体和应用程序之间的边界。最重要的是,Windows Presentation Foundation 可以使开发人员和设计人员同步紧密地合作来快速提供不同的连通体验。

响应程度

  目前已有很多人开始考虑或者已经转向WPF,一场新的学习热潮已经开始。但根据我最近的学习和了解,国内关于WPF的资料很少,除了msdn提供的资料以外,基本都是来自国外的资料,有些则是国外开发人员blog上的资料,当然都是英文的。因此如果现在能够引进一些WPF的书绝对是很好的时机。而且国外目前的几本WPF书也是刚刚上市,如果我们可以尽快引进的话,绝对可以帮助国内开发人员在最短时间内赶上国际步伐。   目前国内即时通讯领导商腾讯Tencent已经发布了一款基于WPFQQ 概念版(QQ 概念版:QQ 概念版应用微软最新一代客户端展现层技术(WPF),实现多点触摸操作,是腾讯首款NUI(自然用户交互)产品,推出了动感相框、动态背景、多Tab聊天窗口、3D交互、桌面好友等一系列新功能,为您打造完美尊贵的新体验。),带给网友全新的体验;由于该产品还处于开发期,许多功能都还有待完善,不过QQ概念版的出现,又让即时通讯领域带来了新的体验与享受。

服务和支持

随着Vista RTM的发布,微软新一轮的技术推广已经开始。其实在此之前,WPF已经有很大的推广,因为CTP版本已经发布了有一段日子了。当然很多开发人员主要以技术研究为主,也有少数公司已经开始从事基于WPF的产品研发工作。  

1. 目前WPF的正式版本已经发布(随.net framework 3.0正式版发布),你可以从msdn上免费下载   

2. 相应的技术支持已经开始,但目前仅限于大客户,主要做售前技术支持,对于普通开发人员的技术支持可能要等到明年2月份才会开始(个人知道的情况,请以微软官方技术支持网站发布的信息为准)   

3. WPFVS2005插件目前还只有社区预览版(CTP版),也是从msdn上免费下载的,但正式版恐怕还要等一段时间,但使用CTP版本确实已经可以在VS2005中进行所见即所得的WPF开发。   

4. WPF/E CTP版本已经发布,你可以在msdn上免费下载。同时发布的还有WPF/E Sample Pack for CTP

前景分析

WPF其实不仅仅是图形引擎而已,它将给Windows应用程序的开发带来一次革命,因为新的架构提供了一种全新的开发模式。当然对于普通用户而言,最直观的就是界面越来越漂亮,看起来越来越舒服了;但对于开发人员而言,界面显示和代码将更好的得到分离,这与从前的桌面应用程序开发有很多不同(界面设置和代码是融合在一起的),这是比较具有革命性的改变之一。   还有就是桌面应用程序和浏览器应用程序的融合,根据ms的承诺,正在开发中的WPF/E,即WPF Everywhere版本,将为基于WPF的应用程序提供全面的浏览器支持,这意味着未来开发出的应用程序将可以基于浏览器在不同的操作系统上运行,当然由于目前还在开发中,并不确定会不会有一定的限制,根据WPF/E开发组的定义,WPF/E仍然是WPF的子集,而不是后继版本。总体而言,WPF的前景应该是一片光明。

二、WPF入门教程 

WPF基础知识

1) C#基础语法知识(或者其他.NET支持的语言)。

2) HTML语言:虽然WPF是窗体程序但是由于使用的XAML语言,如果以前接触过HTMLXHTMLASP.NET之路的东西的话,接受这些标签会很有帮助,以前一直是从事win form开的人来说可能就要适应一下了。

3)C#中的代理、事件要做到熟练掌握,在.NET 3.0 版本后有增加了Routed Events

4)有一定的winformASP.NET经验,主要是对控件事件的处理要有些了解。

5)拥有良好的面向对象的思想:思想是语言的升华。在WPF中,经常要灵活运用各种继承关系、多态、重载等。

 6) DataBinding要有所了解:BindingWPF的一大亮点,在接触它以前如果接触过ADO.NET里面的DataBinding的话对相对起来会容易接受一点,虽然这两个有一定的不同。

7)对设计模式要有一定的了解:越深入越好,在实际项目中,各种设计模式经常交融使用。

  快速的识别并合理的运用,无论是在开发还是调试时都是非常高效的。

另外,WPF存在的初衷即是表现与逻辑的松耦合,最普遍的情况就是XAML作为表现层,背后.cs文件作为逻辑层。因此,日后在从事项目工作时,要时刻谨记这一点,千万不可背道而驰。

不要为了凸显自己的某一些代码特长而将各种逻辑混写在一起,这样非常不实际。

 8)XML的理解:XAML也是XML,对XML的理解绝对有助于快速的接受和使用XAML,并不需要对XML有多么高深的见解。

 无论是WPFWCP以及底层一些的SOAP等都是很有帮助的。

WPF入手练习基础环境

开发环境:VS 2008

数据库:本机SQL Server 2005 

一定不要安装SQL Server 2005 Enterprise Edition,在《安装 SQL Server 2005 的硬件和软件要求》中“操作系统要求”列表有写到2005 Enterprise Edition 不支持 XP),建议安装Developer Edition,一定要安装数据库实例。

 

做一个WPF程序,功能很简单:

 

1)从数据库(本地数据库(local)/AdventureWorks中的person.contact表中提取用户的 ContactID,FirstName,LastName,EmailAddress数据,展示到Form上的一个ListView上。 

2)当鼠标或其他设备选中结果某一项记录时,在List框下面展示出细节。

3)修改其中的内容后,结果联动更新到List框及数据库中。

  想象以下这样一个东西如果在以前使用winform实现会是什么样子呢?

  应该会写不少的方法、属性用于界面之间及界面与数据库之间的联动。

 

WPF的技术亮点之一:

 

DataBinding。在制作过程中,还会为大家不断接受一些控件、布局等相关知识和技巧,部分相关的知识内容与此练习关系不大的,我将会用浅灰色字体带过,对于熟悉这部分内容的读者可以直接跳过。

 

建立一个WPF项目

打开VS 2008 新建一个WPF应用程序

 

WPF界面布局

首先会看到一个靓丽的小方框,将鼠标放在方框的边缘点击就会产生相应的分割线。

 需要将窗体分成三行,可以先随便分割一下,以后在调整相互的大小。这时候会注意到下方的XML代码区域。每个RowDefinition作为一个行被定义出来

 

 

 

 

高度、宽度的几种定义方式 

绝对尺寸(Absolut sizing):就是给一个实际的数字,像现在例子中那样

 

自动(Autosizing):值为Auto,实际作用就是取实际控件所需的最小值 (Setting Height or Width to Auto, which gives child elements the space that they need and no more)

 

Proportional sizing(也可以称之为star sizing因为有个*号表示)

 

值为*N*,实际作用就是取尽可能大的值,当某一列或行被定义为*则是尽可能大,当出现多列或行被定义为*则是代表几者之间按比例方设置尺寸。

  

将这三行的值设置为如下数值,结果会是

 

           

           

           

 

0行设为*用来放置ListView,这样会在实际运行过程中尽可能的充满整个区域

1行设为Auto尽量紧凑配列,少占用空间 

2行设为22固定值,只是用来放一个Button使用

 

对于初学者往往会习惯直接使用控件拖拽的形式来将需要的内容添加到窗体上。

会使控件在一定的坐标上固定位置,这是一种不推荐的做法

WPF窗体中,一个窗体只能持有一个控件,当多个控件想要在窗体中展现时,就需要首先设置一个容器控件(Container)

然后将其他控件放到这个控件里面,形成树状结构.

 因此,布局观第一条就是,控件的布局应该有容器来决定,而不是通过自身使用margin之类的东西来控制位置。

 因为这些属性原本应该是控制自己内部展现或与邻里之间关系的;

 

第二条,控件应避免明确的定义具体的尺寸,因为显示器分辨率及windows窗体的大小都有可能随时改变,如果明确的定义尺寸。

 当窗体变动后就会出现大面积的空白或是缺失。但为了控件功能及效果的展示,应该限定一个可接受的最大及最小尺寸。

 通过MinWidth, MinHeight, MaxWidth, MaxHeight属性可以实现这一点。第三条,不要将界面元素位置设置成与屏幕坐标相关.

 现在显示器分辨率比较多样话,这样的做法还是比较有风险的。

 

第四条,容器应将有效空间共享给其子控件,这也是为了不在窗体调整后,遗留出大块的空余。

 

第五条,容器嵌套使用,因为不同的容器,表现效果不同,必要时应结合使用。

 

 接下来在工具箱(Tool Box)中双击ListView,一个小框会出现在界面上。

 接下来在工具箱(Tool Box)中双击WrapPanel,又一个大框会出现在界面上。

 再增加一个Button

 

调整一下下面的XAML语句,最终结果如下:

   

       

           

           

           

       

       

           

               

                    

                    

                   

                   

                

           

       

       

       

   

WPF

相关推荐