写于 2013-12-17 17:24:51
一、什么是WPF
用我的话说WPF开发出来的目的就是为了替代WinForm的。从微软的种种迹象来说,WinForm逐渐会遭到淘汰(各位WinForm程序员注意了。),毕竟WinForm已经经历了几十年的发展。该有一项新技术来替代了。废话少说,接下来我们进入正题。
二、WPF和WinForm的区别
在用一项技术的时间我们一定要先彻底的了解它,知道它的优点以及缺点。找到最适合应用这项技术的场合。用恰当的工具在恰当的地点做恰当的事情。
在做传统WinForm开发的时候,我们如果想对一个Button进行重绘,通常有这么两种方法。1、贴图。2、GDI重绘。当然你可能还会说,我能用DirectX画。不过需要注意的是,我们在做开发的时候要注意控制一下开发成本。
贴图少不了美工,大部分程序员都是UI方面的白痴,当然也包括本人。图片资源放在哪里始终是个值得纠结的问题。放在程序的资源文件里吧文件会变得很大。和程序分离出来吧,免不了被哪个闲的蛋疼的删掉。
我们再反过来看WPF是怎么处理Button重绘的。
-
<Button>
-
<Button.Template>
-
<ControlTemplate>
-
<Grid>
-
....
-
</Grid>
-
</ControlTemplate>
-
</Button.Template>
-
</Button>
看到上面的代码,你想到了什么?xml、html还是什么?错,全都不是,这是xaml(官方的解释是:eXtensible Application Markup Language 可扩展应用程序标记语言)。看到这个你可能会想,难道wpf的代码是用xaml实现的吗?这可能说是wpf有别于winform最大的特点了(当然只是表面上看起来)。UI部分的代码通过xaml实现,后面逻辑还是继续用c#、vb.net来实现。
三、了解XAML
你可能想问,xaml到底是什么?和xml有什么区别。从表面上看xaml和c#的语法是完全不同的。没有人会认为这是同一种语言。但我们仔细看上面的例子,<Button>....</Button>这是一个控件的开始结束标记,很明显可以看出这是一个Button控件。和c#里的 Button btn = new Button();没什么两样。<Button.Template>这明显是Button控件的Template属性。ControlTemplate是另外一个对象。从字面意思上就可以理解是控件模板。用ControlTemplate去替换Button的Template。这么一分析就很容易理解了,其实xaml只不过是把c#换了一种展现形式而已。