WPF The Hard Way
WPF The Hard Way
Windows Presentation Foundation (WPF) 是微软下一代显示系统,用于生成能带给用户震撼视觉体验的 Windows 客户端应用程序。 使用 WPF,您可以创建广泛的独立应用程序以及浏览器承载的应用程序。
WPF 的核心是一个与分辨率无关并且基于向量的呈现引擎,旨在利用现代图形硬件的优势。WPF 通过一整套应用程序开发功能扩展了这个核心,这些功能包括可扩展应用程序标记语言 (XAML)、控件、数据绑定、布局、二维和三维图形、动画、样式、模板、文档、媒体、文本和版式。WPF 包含在 Microsoft .NET Framework 中,使您能够生成融入了 .NET Framework 类库的其他元素的应用程序。
记得第一次接触WPF的时候正是微软 .NET3.0 release的时候,当时自己立刻被那些震撼的效果吸引了,当时自己写了好多的小程序去研究一些新奇的特性。但是由于自己所在的项目当时还主要是使用上一代的微软技术,为了保持界面的一致性,并没有引入WPF。当时WPF炒的很热,其子版本silverlight也是风生水起,时至今日,大浪淘沙,silverlight已经很少有人用了,代之以HTML5,但是作为微软的下一代界面,WPF却活了下来,据笔者所知,业内好多的客户端软件都是以WPF写成的,因为界面漂亮。
由于项目的原因,下一代的产品采用了WPF作为客户端的解决方案。好多人不太理解为什么是WPF,为什么不是HTML5,为什么不是ASP.NET MVC。首先从安全角度来说,WPF代表的是受信的代码,区别于浏览器中的代码,可以最大化的利用客户端资源,虽然云计算的概念炒的很火,但是对于某些行业来说,安全性和解决方案上面还是显得很蹩脚。
WPF中最重要的概念就是XAML和部分类,MFC和ATL中主要使用的.rc文件代之以XAML,相对于.rc文件,XAML有更强的表现能力和对GPU的操作能力,当然写出来的东西的也更炫。
<Window x:Class="WPFTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <Button Content="Button for Test" HorizontalAlignment="Left" Margin="193,140,0,0" VerticalAlignment="Top" Width="131" RenderTransformOrigin="-0.305,0.503" Height="29" Click="Button_Click_Test"/> </Grid> </Window>
举例来说,如上代码就相当于在项目里面定义了一个window 和一个button,同时为button添加了一个onclick事件理程序,完全的XML结构,相对.rc更下清晰,在编译的时候,这段代码会编译为部分类的一部分,当然,作为设计的一部分,代码和UI应该是分离的所以代码部分看起来应该像是这样的。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WPFTest { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Button_Click_Test(object sender, RoutedEventArgs e) { MessageBox.Show("Please don’t click this button again"); } } }
除去固定的命名空间引入代码,简单的几行代码就完成了MFC中的Window结构定义,消息映射,消息函数声明,很多复杂的宏语句才能完成的功能,代码结构一目了然。
总结
在今天的Windows平台上开发客户端应用程序,如果需要炫丽的界面,WPF一定是你最佳的选择,不管从开发效率还是开发能力上,当然游戏开发不在本文的讨论范围之内,因为笔者对游戏开发没有过深入的研究。