我一直在看WPF,但我从来没有真正参与其中(除了15分钟,这提示了这个问题)。我看了这个post,但它真的是关于WPF的“Flash”。那么Windows窗体应用程序和WPF应用程序之间有什么区别呢?
答案 0 :(得分:61)
WPF是一个基于矢量图形的UI表示层,WinForms不是这样。为什么这很重要/有趣?通过基于矢量,它允许表示层平滑地将UI元素缩放到任何大小而不会失真。
WPF也是一个可组合的演示系统,这意味着几乎任何UI元素都可以由任何其他UI元素组成。这使您可以轻松地从更简单的UI元素构建复杂的UI元素。
WPF也是完全数据绑定感知,这意味着您可以将UI元素的任何属性绑定到.NET对象(或对象的属性/方法),另一个UI元素的属性或数据。是的,WinForms支持数据绑定,但方式有限。
最后,WPF是“可换肤的”或“可主题化的”,这意味着作为开发人员,您可以使用列表框,因为这些是您需要的行为,但有人可以“皮肤化”它看起来像完全不同的东西。
想一下图像列表框。您希望内容实际上是图像,但您仍然需要列表框行为。通过简单地使用列表框并更改内容呈现以包含图像而不是文本,这在WPF中完全无关紧要。
答案 1 :(得分:20)
一种看待这种情况的好方法可能首先要问的是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 which start here开发的一系列博客文章。无论是在代码还是思想方面,这都是一个很好的演练过程。
答案 2 :(得分:9)
要回答您的问题,WPF应用程序 是Windows应用程序。 WPF是Microsoft的新框架(实际上,它是.NET framework 3.0的子系统),用于编写丰富的Windows应用程序。它意味着WinForms的最终替代品(虽然承认采用率比MS希望的要慢得多)。
答案 3 :(得分:3)
从这里开始,有几十个和几十个视频:http://www.windowsclient.net/learn
在这种情况下,营销schpiel非常好:
**“Windows Forms是.NET Framework中的一组类,可以快速开发丰富的Windows客户端应用程序,具有用于用户界面控件和图形的强大,可扩展的库。您可以在Windows窗体应用程序中合并WPF通过WPF-Windows Forms .NET 3.5 Framework中的互操作性。“*
*“WPF是Microsoft .NET Framework 3.5的一个组件,它使您能够构建下一代Windows用户体验.WPF支持UI,媒体,文档,硬件加速,矢量图形,可扩展到不同的外形,交互式数据可视化和卓越的内容可读性。“**
使用WPF,您可以获得更好的图形支持,更强大和更灵活的数据绑定(如果您正在使用Data,请使用WPF。)
答案 4 :(得分:3)
WPF代表 W indows P 代表 F 基础。虽然WinForms技术依赖于GDI / GDI +,但WPF直接构建在DirectX之上。这意味着你可以使用WinForms做更多的事情,同时仍然使用.NET Framework类库。您可以构建丰富的用户界面,2D / 3D游戏,演示文稿等等。 WPF很像Flash(swf)电影,没有元素“电影”。 WPF基于.NET,可用于构建富客户端Web应用程序。
答案 5 :(得分:2)
答案 6 :(得分:0)
从实现的角度来看,主要区别之一是WPF使用严格强制执行的模型 - 视图 - 视图模型MV-VM体系结构,视图以自定义标记语言XAML定义,视图模型是可访问的类属性,模型有效地成为数据访问层。相比之下,WinForms没有这样明确的分离 - 尽管按照惯例,不同的方面可以分组在不同的C#文件中,它们仍然是代码。实际上,这使WPF开发更像Web DOM开发,WPF框架在后台运行并进行调解。