-
2009-03-06
了解WPF - [技术资料]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://rasaba.blogbus.com/logs/36213918.html
今天午餐和晚餐共同涉及的话题就是WPF。自中午潘哥的介绍后,下午我特地跑到鹏举处现场体验WPF,看了看UI和核心Code究竟怎么分离工作,然后整个工程又是怎么集成到一起的。尤其我还特地问了鹏举的使用感受,可是结果怎么和我的先验知识不那么匹配啊。。。搞笑的是潘哥在我们对面机器上听着鹏举给我的不入流的介绍,只能干着急,却又一时脱不了身过来,真逗。。。

总结潘哥介绍的特性,大致有以下几点:
1. UI等资源是以XML的方式组织(实际上是XAML文件),可以单独独立出去进行编辑和设计。所以,UI和核心code可以分离,各自设计实现后再由核心code所在工程load进UI的设计文件,整合到一起。code里,只需要指定UI控件的名称和事件。UI部分控件名称和事件接口不变,显示效果部分可以自由设计。(但是,我觉得,code里既然指定了控件名称,也就指定了控件的类型,所以说UI的设计还是有一定的局限性。假如核心code只定义事件,至于这个事件由什么类型的控件的什么事件来触发都可以由分离的UI层进行设计就更好了。。。)
2.WPF对控件的操作自由度比较大、效果比较好,运行在.NET Framework 3.0架构下。WPF的绘图引擎也比较强大,用到了DirectX等技术,支持2D,3D图形绘制,可以做出vista等能和mac媲美的图形效果。。。(实际上WPF预期支持文档、媒体和用户界面的设计和操作方式,据说的WPF/E,即WPF Everywhere版本,将为基于WPF的应用程序提供全面的浏览器支持,这意味着未来开发出的应用程序将可以基于浏览器在不同的操作系统上运行 )
下面是网上找的一些资料:
=================Some WPF ZZ Ref=============================
你也许听说过Avalon(现在被称为Windows Presentation Foundation,或WPF),微软公司早在2003年洛杉矶的PDC上就公布了Avalon,他们将其视为下一代用户界面技术,并且得到了开发者和用户的一致赞同。在2005年的PDC上,微软公司展示了比2003年更加完整的Avalon版本,并给它取了一个官方新名称:Windows Presentation Foundation(WPF)。在此之前,它已经完成了从演示软件到开始阶段alpha版本的API的转变。到了几个月之后的今天,它又成长成为更加先 进的beta版本--你可以使用它来开发你的下一代用户界面程序了。
那么,WPF是什么?WPF是 Microsoft 用于 Windows 的统一显示子系统,它通过 WinFX 公开。它由显示引擎和托管代码框架组成。Windows Presentation Foundation 统一了 Windows 创建、显示和操作文档、媒体和用户界面 (UI) 的方式,使开发人员和设计人员可以创建更好的视觉效果、不同的用户体验. Windows Presentation Foundation 发布后(计划在 2006 年),Windows XP、Windows 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 框架的核心是用于形状、文档、图像、视频、动画、三维以及用于放置控件和内容的面板的一系列控件。这些“自有控件”为开发下一代用户体验提供了构造块。
为什么选择 Windows Presentation Foundation?首先,它清晰而又有效的将用户界面和程序实现分开。它使得设计可视化的用户界面的设计者和编写内部核心代码的开发人员可以并行工作。这是非常重要的:
·将两者分开,软件开发公司可以使得设计者们集中精力将设计工作做得更好,同时让开发者支持他们。WPF提供了统一的 UI 平台可消除内容、媒体和应用程序之间的边界。因此他们只需学习一个模式,就可以获得无限可能的 UI 体验。
·随着软件外包和订购的逐渐风行,WPF使得一些商业的设计者们能够更好的从事界面设计工作,并集成一些简单的功能,而购买的核心代码能够独立的完成内部的一些关键逻辑而不干扰设计过程。由于WPF是窗体、文档、视频、三维以及其他功能的综合,因此企业可以创建持久的用户体验解决方案,并集成到客户的日常活动中.
·它更好的支持应用软件的国际化。不同的独立的界面可以使用不同的本地化方案,而内部的代码是通用的。
·它支持软件的"空标签":可以为不同的用户采用定制的界面而保持核心的逻辑不变。开发者们创建程序逻辑,然后为不同的用户使用不同的界面并贴上他们的商标等。
WPF使用一种基于XML(Extensible Application Markup Language)的语言来定义用户界面从而完成上述的工作。这种语言被称为XAML,XML应用程序标记语言。XAML,是一种公开表示 Windows 应用程序用户界面的标记语言,可使开发人员和设计人员用来构建和重用 UI 的工具更加丰富。对于 Web 开发人员,XAML 提供了熟悉的 UI 说明模式。XAML 还使 UI 设计从基础代码中分离出来,从而使开发人员和设计人员之间的合作更加紧密。
其次,WPF使用一种基于向量而不是基于光栅的绘制引擎,这和曹其的Windows的绘制引擎是截然不同的。光栅绘制引擎通过在屏幕上绘制象素点来绘制 表面。象素只是点;这样的话,如果屏幕分辨率(DPI,每英寸点)增加了,它的效果就会变差。随着现在屏幕都采用超高DPI的分辨率,字体必须使用成百上 千个DPI来达到一定的浏览效果。比如微软Word里缺省的英文字体12号的Times New Roman,在现在的普通分辨率情况下效果还可以但是到了超高分辨率的显示器上效果就不行了。管理这些基于光栅的图像的点将会消耗大量的处理能力,同时也 是很浪费的。而采用基于向量的方式来替代象素,在一个可扩展的坐标系里绘制字体和其他线型,使得它们可以独立于DPI。想想Windows Metafile(WMF)和位图文件(BMP)之间的差距你就明白了。同时,向量图也使得一些变换如3D,旋转和动画变得更加方便和易于操作。
好,理论就讲到这里,下面开始我们的第一个基于WPF的应用程序之旅吧。
开始工作
首先,在你开始前,我强烈建议你卸载所有和WinFX,Windows SDK以及其他一些开发的测试版本工具有关的所有东西。事实上,我甚至认为,删除掉VS2005和.NET framework 2也使很不错的主意。你可以尝试着使用预安装它们的机器,但是我觉得最好还是用一台比较"干净的"机器。你可以尝试着使用微软的Virtual PC或者Vmware Workstation来运行一个虚拟机镜像以达到我所说的要求。其次,在你开始以前,你需要下载一个清理软件CCleaner.com。这个软件会清理 你的注册表里一些坏的,老的或不用的键值将它们清理掉。
下面你需要下载并且安装一些软件:
1. 首先你需要WinFX runtime components。
2. 安装之后重启--下面安装VS2005如果你没有安装的话。如果你没有正式版本,下载一个free Express Edition。
3. 然后下载Windows SDK--1G大小左右。注意你最好是下载IMG文件并刻录到DVD上或者使用虚拟光驱来安装它。不幸的是,我这样做每次都不成功。所有,我推荐你下载 IMG文件,并且下载相关的Setup文件(相同页面下载)。将它们放到你硬盘的同一目录下。运行Setup程序进行安装。
4. 最后你需要下载Visual Studio development tools(Orcas)来进行WinFX开发。它包含了VS里的"Cider"设计器来编辑XAML。
5. 最后你必须下载Expression Designer for XAML。
作为程序员你可以使用Cider工具来在VS.NET里创建基本的XAML用户界面,这样的方式你会感到很熟悉,和在VS中进行一般的Windows 窗体设计差不多。但是,如果要是用一些XAML提供的高级特性,我建议你还是研究一下Expression Designer for XAML。
第一个WPF程序
如果所有的工具都安装正确,你就可以开发你的第一个WPF程序了。打开VS2005,选择文件->新建工程。你将会看到工程对话框,如图1所示。
图1
在图1中,你可以看到一套新的工程类型,名为Windows(WinFX),包括WinFX Windows程序,服务库,浏览器程序和控件库。它们分别用来创建XAML客户端程序,Indigo服务,XAML浏览器(Web窗体)程序,和控件库。这篇文章里,我主要讲解创建一个WinFX windows应用程序的流程,所以我们选择和其对应的工程模板。
当你第一次创建这个程序的时候,你将会看到和标准的VS设计环境类似的界面,但是事实上它是一个VS的新的XAML设计器,代号"Cider"。如图2所示。
图2
如果你仔细看图2,你会发现在设计面板的下部有一个新tab,名为"Xaml"。点击它,你会看到当前设计的XAML,这个XAML包含了一个简单的对话框,显示了一个lable,一个textbox,一个按钮:<Window x:Class="AvalonHelloWorld.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/
presentation" xmlns:x=
"http://schemas.microsoft.com/winfx/2006/xaml"
Title="AvalonHelloWorld" Height="300" Width="300"
Opacity="0.5">
<Grid>
<Button Width="NaN" Height="37"
VerticalAlignment="Bottom"
HorizontalAlignment="Stretch" Grid.Column="0"
Grid.ColumnSpan="1" Grid.Row="0"
Grid.RowSpan="1"
Margin="114,0,8,8"
Name="button1">Button</Button>
<Label Width="NaN" Height="30.276666666666667"
VerticalAlignment="Top"
HorizontalAlignment="Stretch"
Grid.Column="0" Grid.ColumnSpan="1"
Grid.Row="0"
Grid.RowSpan="1"
Margin="16,25.7233333333333,89.37,0"
Name="label1" FontSize="20">
Enter Text Here:</Label>
<TextBox Width="NaN" Height="42.276666666666671"
VerticalAlignment="Bottom"
HorizontalAlignment="Stretch"
Grid.Column="0" Grid.ColumnSpan="1"
Grid.Row="0"
Grid.RowSpan="1" Margin="16,0,34.37,157"
Name="textBox1"></TextBox>
</Grid>
</Window>
当你改变Cider可视化编辑器里的对话框的布局的时候,工具会自动更新XAML的内容。
对控件的基于设计者的事件添加机制还没有被Cider所支持,不过如果手工对XML进行一些修改就可以很容易的增加一些事件。比如,你可以手工为"Click"属性增加一个点击事件处理:<Button Click="ButtonClick" Width="NaN" Height="37"
VerticalAlignment="Bottom"
HorizontalAlignment="Stretch"
Grid.Column="0" Grid.ColumnSpan="1" Grid.Row="0"
Grid.RowSpan="1" Margin="114,0,8,8"
Name="button1">Button</Button>
你可以看到,这里做的就是为按钮增加了一个新的"Click"属性,并且给出了点击按键事件句柄的名称。如果你选择了"Source"那个tab,你可以为这个事件创建处理句柄。
Avalon使用一种被称为"Routed Events"的机制来绑定XAML和后端代码,如同其名--事件在运行时在独立的XAML UI和代码之间相互传递。
这样的话,你需要声明事件句柄来使用RoutedEventArgs参数:void ButtonClick(object sender, RoutedEventArgs e)
{
System.Windows.MessageBox.Show("Hello World to:"
textBox1.Text);
}
如果你此时运行程序,你将看到WPF基于向量的引擎已经开始工作了,如图3所示。
图3
这样你就完成了你的第一次Avalon的学习之旅,也许它没有想象中的激动人心,但是毕竟你已经开始掌握这一先进技术了。使用Expression来设计XAML
Microsoft Expression是一个比基本的Cider工具更加强大的XAML设计工具,它包含在VS.NET的WinFX工具集中。这一节里,你将看到如何使用 它来设计一个XAML界面并且和上文一样将代码合成到VS.NET中去。注意这里也同样展示给你,设计者和开发人员如何独立的秉性工作,来使用不同的工具 发挥各自所长。
打开Microsoft Expression,创建一个新的工程,选择Windows Executable Project。如图4所示。
图4
这里将会创建一个包含XAML文件和后端C#文件的VS兼容工程。你可以在Expression中编辑代码,不过编辑器并没有包含开发人员所熟悉的集成调试和其他功能。不过在不久的将来,Expression将会允许设计者和程序员共享一个管理工程的通用文件格式。
你可以使用Expression交互式设计器中的工具来设计一个更加花哨的界面。这里我设计了一个和早先给出的例子一样的界面--Hello World程序。不过,我使用了一些Expression的旋转和平行四边形的效果来使得它显得更加花哨。如图5。
图5
Expression保存了一个包含所有XAML和.CS文件的.csproj文件,所以创建了界面之后,你就可以在VS2005中打开和使用相同的工程了。
当你在VS2005中打开工程,你将会看到工程设置和你开始在创建一个新的WinFX Windows程序的时候差不多。一个小小的不同点在于 Expression将你的XAML组织为"Scenes"而不是"Windows",所以内部 XAML是有点不同的,当你运行它的时候XAML在一个scene容器内进行绘制,如图6所示。
图6
你现在可以像上面一样给按钮控制增加代码;不过你必须和XAML进行消息传递,集成化还没有给你做好它。同样,你也许会得到一个Expression增加的<Trigger>标记引发的错误。删除掉它,然后你就可以运行你的程序了。
图六显示了一个运行中的程序(在Scene查看器中),当用户点击按钮时会弹出Hello,world消息。
结束语
在这篇文章里我们主要介绍了Windows Presentation Foundation,以前它被叫作Avalon,并且研究了基于向量的绘制引擎给你的Windows界面设计带来的好处。你使用不同的方式创建了一个简 单的程序,开始是使用了"Cider",它的XAML编辑器将来会合并进入VS2005。然后我们使用了Microsoft Expression交互式设计器来完成相同的工作。因为在Expression和VS2005里的文件集是兼容的,你可以看出界面设计师可以使用 Expression来设计程序原型然后再将其给开发人员进行核心代码开发,为应用程序添加程序逻辑等。
在今后的文章里,我们将介绍使用VS2005和Cider来创建2D的Windows窗体程序,并且会探索一些实现3D效果的API以及Windows Vista里的新的Aero函数功能。这将会是一次奇妙的程序之旅。随机文章:
Product Mould Inquiry System 2009-03-04了解XMPP[2]--核心协议 2009-03-040x5f3759df 2008-10-31【转】From Compiler to loader 2008-09-08[转]WINDOWS系统文件分类详解 2007-04-08
收藏到:Del.icio.us







