我一直在看WPF,但我从来没有真正参与其中(除了15分钟,这促成了这个问题).我查看了这篇文章,但它真的是关于WPF的"Flash".那么Windows窗体应用程序和WPF应用程序之间有什么区别?
WPF是基于矢量图形的UI表示层,WinForms不是.为什么这很重要/有趣?通过基于矢量,它允许表示层平滑地将UI元素缩放到任何大小而不会失真.
WPF也是一个可组合的表示系统,这意味着几乎任何UI元素都可以由任何其他UI元素组成.这使您可以轻松地从更简单的UI元素构建复杂的UI元素.
WPF也是完全数据绑定感知,这意味着您可以将UI元素的任何属性绑定到.NET对象(或对象的属性/方法),另一个UI元素的属性或数据.是的,WinForms支持数据绑定,但是以更有限的方式.
最后,WPF是"可换肤的"或"可主题化的",这意味着作为开发人员,您可以使用列表框,因为这些是您需要的行为,但有人可以将其"皮肤"看起来像完全不同的东西.
想一下图像列表框.您希望内容实际上是图像,但您仍然需要列表框行为.通过简单地使用列表框并更改内容呈现以包含图像而不是文本,这在WPF中完全无关紧要.
看待这个问题的好方法可能首先要问的是Winforms究竟是什么.
Winforms和WPF都是旨在使应用程序的UI层更易于编码的框架.这里真正的老人们可能会谈论如何编写Windows版本的"Hello,World"可能需要4页左右的代码.此外,岩石比较柔软然后我们编码时我们不得不与巨型蜥蜴战斗.Winforms库和设计器执行许多常见任务,使它们更容易编写.
WPF做了同样的事情,但意识到这些常见任务现在可能包含更多视觉上有趣的东西,除了包括许多Winforms不一定认为是UI层的一部分的东西.WPF支持命令,触发器和数据绑定的方式都是框架的重要组成部分,但其核心原因与Winforms首先存在的核心原因相同.
这里的WPF改进是,您现在可以将控件的功能与其外观分开,而不是让您选择从头开始编写完全自定义控件或强制您使用具有有限自定义功能的单组控件.描述我们的控件在XAML中的外观并将其与控件在代码中的工作方式区分开来的能力与Web程序员习惯使用的HTML/Code模型非常相似.
一个好的WPF应用程序遵循一个好的Winforms应用程序的相同模型; 尽可能多地保留UI层之外的内容.应用程序和数据层的核心逻辑应该是相同的,但现在有更简单的方法使视觉效果更令人印象深刻,这可能是为什么你在其上看到的大部分信息涉及更闪亮的视觉材料.如果您正在学习WPF,您实际上可以像使用Winforms一样使用它,然后在掌握它们时重构其他功能.有一个很好的例子,我强烈推荐Scott Hanselman关于BabySmash开发的一系列博客文章,从这里开始.无论是在代码还是在思想方面,这都是一个很好的演练过程.
要回答您的问题,WPF应用程序是 Windows应用程序.WPF是Microsoft的新框架(实际上,它是.NET framework 3.0的子系统),用于编写丰富的Windows应用程序.它意味着WinForms的最终替代品(虽然承认采用率比MS希望的要慢得多).