什么是WPF,它与WinForms相比如何?

我一直在看WPF,但我从来没有真正的工作(除了15分钟,这引发了这个问题)。 我看了这篇文章,但它真的是关于WPF的“Flash”。 那么Windows窗体应用程序和WPF应用程序有什么区别?

WPF是一个基于vectorgraphics的UI表示层,其中WinForms不是。 为什么这很重要/有趣? 通过基于vector,它可以使表示层平滑地缩放任意大小的UI元素而不会失真。

WPF也是一个可组合的演示系统,这意味着几乎所有的UI元素都可以由其他UI元素组成。 这使您可以轻松地从简单的构build复杂的UI元素。

WPF也完全意识到数据绑定,这意味着您可以将UI元素的任何属性绑定到.NET对象(或对象的属性/方法),另一个UI元素的属性或数据。 是的,WinForms支持数据绑定,但方式更为有限。

最后,WPF是“skinable”或“themeable”,这意味着作为一个开发者,你可以使用一个列表框,因为这些是你需要的行为,但是有人可以“皮肤”它看起来像完全不同的东西。

想想一个图像列表框。 你想要的内容实际上是图像,但你仍然希望列表框的行为。 在WPF中,通过简单地使用列表框并更改内容表示来包含图像而不是文本,这完全是微不足道的。

研究这个问题的一个好方法可能首先是询问Winforms究竟是什么。

Winforms和WPF都是为使应用程序的UI层更易于编写而devise的框架。 这里的老人们可能会谈论如何编写“Hello,World”的Windows版本可能需要4页左右的代码。 此外,岩石是一个很好的处理,然后我们在编码时不得不与大蜥蜴战斗。 Winforms库和devise器承担了许多常见的任务,使得它们更容易编写。

WPF做同样的事情,但意识到这些常见的任务现在可能包括更多的视觉上有趣的事情,除了包括许多事情,WinForms不一定认为是UI层的一部分。 WPF支持命令,触发器和数据绑定的方式都是框架的重要组成部分,但其核心原因与Winforms原先存在的相同。

WPF的改进在于,不是给你提供从零开始编写一个完全自定义控件的选项,或者迫使你使用一组具有有限自定义function的控件,现在可以将控件的function从外观上分离出来。 描述我们的控件在XAML中的外观以及与控件在代码中的工作方式相分离的能力与Web程序员习惯使用的HTML / Code模型非常相似。

一个好的WPF应用程序遵循Winforms应用程序的相同模型; 尽可能多地从UI层保存内容。 应用程序和数据层的核心逻辑应该是相同的,但是现在有更简单的方法让视觉效果更加令人印象深刻,这可能就是为什么你所看到的大部分信息都涉及到更多的可视化内容。 如果你正在学习WPF,你可以开始使用它几乎和WinForms一样,然后在你掌握它们的时候重构其他的function。 作为一个很好的例子,我强烈推荐Scott Hanselman关于BabySmash开发的一系列博客post, 从这里开始 。 无论是在代码和思想上,这个过程都是一个很好的演练。

要回答你的问题,一个WPF应用程序一个Windows应用程序。 WPF是微软新的框架(实际上,它是.NET框架3.0的一个子系统),用于编写丰富的Windows应用程序。 它意味着作为WinForms的最终替代品(尽pipe毫无疑问,采用率比MS希望的要慢得多)。

从这里开始,有几十个和几十个video: http : //www.windowsclient.net/learn

在这种情况下,营销stream程非常好:

**“Windows Forms是.NET框架中的一组类,可以快速开发丰富的Windows客户端应用程序,具有强大的,可扩展的用户界面控件和graphics库。您可以通过WPF- .NET 3.5框架中的Windows Forms互操作性“。*

*“WPF是Microsoft .NET Framework 3.5的一个组件,可以帮助您构build下一代Windows用户体验,支持UI,媒体,文档,硬件加速,vectorgraphics,不同外形尺寸的可伸缩性,交互式数据可视化,和优越的内容可读性。“**

使用WPF,您将获得更好的graphics支持,更强大和更灵活的数据绑定(如果您使用的是数据,请使用WPF)。

WPF代表W indows P resentation Foundation。 虽然WinForms技术依赖于GDI / GDI +,但WPF直接构build在DirectX之上。 这意味着你可以做比WinForms更多的工作,同时继续使用.NET Framework类库。 您可以构build丰富的用户界面,2D / 3D游戏,演示文稿等等。 WPF很像一个Flash(SWF)电影,没有元素“电影”。 WPF基于.NET,可用于构build丰富的客户端Web应用程序。

  1. WPF实质上是一个用于为Windows平台创buildgraphics用户界面的新API。
  2. WPF不仅仅是构buildWindows客户端应用程序的下一代演示系统,还包括视觉上令人惊叹的用户界面。
  3. WPFbuild立在DirectX(Direct3D)之上,而不是依赖于旧的GDI / GDI +子系统。
  4. WPF是一个基于vectorgraphics的UI表示层,并且是基于vector的,它允许表示层顺利地将UI元素缩放到任意大小而不失真。
  5. WPF是“skin-able”和“theme-able”。 这意味着WPF允许改变任何UI控件的外观和感觉。

从实现的angular度来看,WPF的一个主要区别是,WPF使用严格实施的MVC模型 – 视图 – 视图模型,视图定制为自定义标记语言XAML,视图模型是具有可访问属性的类,该模型有效地成为数据访问层。 相比之下,WinForms没有这样明确的分离 – 尽pipe按照惯例,不同的方面可能被分组在不同的C#文件中,它们仍然是代码。 实际上,这使得WPF开发更像Web DOM开发,WPF框架在后台运行并进行调解。