WPF比winforms更“华而不实”吗?

时间:2008-10-10 21:02:36

标签: wpf winforms

我刚安装了visio,安装程序几乎就像是用flash构建的。 当我在它们上面盘旋时,按钮有点闪烁,当我点击“继续”时,表格以一种很酷的方式逐渐消失。

我假设它是用WPF构建的。

无论如何,WPF更像闪存(在视觉上说)。 他们是否有新的属性,与winforms相比,你可以使表格逐步完美地逐步淘汰?

4 个答案:

答案 0 :(得分:12)

免责声明:我为微软工作。但是,我不在Visio,WPF,CLR或Silverlight团队工作。因此,以下是我个人对这些技术的看法。如果你想引用我的话,不要暗示这是微软的官方立场。 : - ))

更新:我在下面谈到的关于Flash / Flex / AIR的任何内容都可能是错误的,因为我没有使用过这些技术,而我对它们的了解是基于我在intertubes上读到的内容。 :-)如果你发现任何错误,只需在评论中大喊大叫,我就会更正。

据我所知,Visio安装程序不是使用WPF构建的。这都是非托管代码;只是人们花了很多心思才能让它变得非常精致。

WPF是用于为Windows操作系统构建独立应用程序的新UI平台。它支持声明性UI语言 - XAML以及要编程的相关CLR类型。 WPF是一个与WinForms不同的平台,尽管可以构建混合使用两者构建的UI的应用程序。 WPF支持许多WinForms不支持的东西,比如位图效果,动画,控件样式等,并在XAML或代码中公开它们。此外,WPF在很大程度上依赖于矢量图形,而不是WinForms中的像素图形。简而言之,WPF功能非常强大,可以构建非常时髦的UI。 (不要相信我的话,因为我有偏见;去看看人们对此有何看法或与之相处。: - ))

WPF和WinForms不与Flash / Flex竞争。 WPF和WinForms都是用于构建独立客户端应用程序的UI框架。据我所知,Flash / Flex是构建富Internet应用程序的框架 - RIA(尽管最近人们开始将这个缩写解释为丰富的交互式应用程序)。

Adob​​e确实提出了大约半年(或者可能是一年)之前的AIR,它允许构建独立的客户端应用程序,因此您可以说Adobe正试图定位Flash / Flex / AIR以与WPF竞争。当然,这是我的看法,我怀疑Adobe的官方立场就是这样。

如果您想将特定的MS技术与Flash / Flex进行比较,请查看Silverlight - 这是MS RIA平台。

Silverlight与WPF有关,因为它们共享XAML和相应的CLR类型。 Silverlight仅支持WPF提供的一部分,因为它不仅仅针对Windows操作系统,因此受到必须便携的限制。

快速更新,以反映自我写完答案后一年中的变化: - )

随着Silverlight 3的发布,SL和WPF越来越接近并共享更多支持的功能。此外,大多数新的XAML控件都是同时为平台构建的。因此,SL / WPF正处于一个奇点......

此外,SL 3支持浏览器外应用程序。从这个意义上说,SL不仅开始与Flash / Flex竞争,而且还在侵犯AIR的地盘。

不,我仍然没有在WPF或Silverlight团队工作。 : - )

答案 1 :(得分:5)

WPF被用作WinForms的替代品,并以Silverlight的形式用作Flash的竞争对手。 WPF由一个位于DirectX之上的全新对象模型(至少是桌面版本)组成。您可以完全使用C#或其他.Net语言创建WPF窗口,控件等,就像您可以渲染WinForms一样。但是,Microsoft还创建了一种名为XAML(eXensible Application Markup Language)的标记语言。 XAML文档(XML)中的节点以与ASP.Net映射到Web控件的方式类似的方式映射到对象。 XAML通常存在于.Net项目中,与代码隐藏式C#文件(或VB.Net或其他)一起存在。 C#文件与XAML生成的对象进行交互。这与微软和其他人推动的“通过标记的图形,通过代码的逻辑”模型相当一致。

讨论WPF时忽略的一个特性是Microsoft为WPF编写的 完全令人敬畏的数据绑定 。新的数据绑定框架是Windows Forms 2.0数据绑定之外的一次飞跃。 Microsoft添加了几个新接口,使得更容易使对象或集合正确地发出数据绑定事件。他们还提供了一组非常丰富的数据绑定类。你可以将任何东西绑定到其他任何东西上。您可以绑定单向数据来控制,控制数据,双向控制数据和返回,控制控制等。

回到房子的图形方面,WPF使得现有控件看起来像任何东西都相当容易。 WP允许您为一类按钮的外观或一个按钮或所有按钮编写自己的模板。或单选按钮。或标签。你得到我的漂移。想象一下,如果CSS包含使用其他HTML控件定义输入按钮的外观的能力。

它们还提供了许多布局控件。您可以继续使用WinForms中的精确定位,或者您可以利用各种技术使您的窗口更像是通过调整大小等增长和缩小的网页。

缺点: 创建在较慢的机器上爬行的壮观效果太容易了。一些显卡没有利用显卡的硬件,尽管微软已逐步改进对此的支持。我相信当3.0第一次出现时,投影纯粹是使用软件渲染的。我认为3.5或3.5 SP1改变了它,以便WPF利用图形硬件完成任务。微软表示他们将继续以这种方式增强WPF。

WPF是.Net 3.0及更高版本,它运行在XP SP2,Vista和Server 03& 08.所以不要计划将WPF部署到使用Win2k桌面的客户。

摘要: 如果您在.Net中进行桌面编程,除非您的目标是Win2k,否则您应该在WPF中进行。你可以避免WPF的缺点,并且有许多好处。微软可能会在未来的某个版本中丢弃WinForms,或者至少你会停止看到新的功能等。

就Silverlight而言,SL 2.0的测试版看起来不错。我认为Silverlight需要广泛采用。微软已经试图实现这一目标。 NBC Olypmics网站使用Silverlight,而Major League Baseball将其用于MLB.tv产品。一旦Silverlight获得良好的安装基础,我认为您将看到开发世界的微软方面开始摆脱Flash和Silverlight。


使用Silverlight 3和MVVM后编辑:

我已经离开了WPF并且正在进行大量的Silverlight 3开发。但我认为我的评论仍然适用于WPF开发人员。

我一直在我的应用中使用 MVVM 模式(认为MVC有一个转折)。 Microsoft模式和实践团队发布了一组称为 Prism 的库,它们支持MVVM的各个方面。有WPF和Silverlight版本。如果您要进行WPF或Silverlight开发,请查看MVVM和Prism。

答案 2 :(得分:2)

您可以使用Winforms或自定义组件执行大量闪存。但是如果你想要开箱即用的爆炸性能,WPF就是你的选择。

是的,我认为目的是闪现,在我看来MS已经着眼于取消Adobe。

答案 3 :(得分:0)

我看待它的方式:WPF是Flash,因为WinForms是Flex。 WPF更注重向量和状态,而不是编程。