我们正在开始一个新项目,并试图决定使用Windows窗体或WPF。
我已经阅读了其他一些Stack Overflow帖子,并意识到WPF在数据绑定和外观方面有一些优势,但也有一个陡峭的学习曲线和相当不成熟的工具和控件。
我们希望更好地了解Microsoft是否计划停止Windows Forms技术的新开发并强制所有新开发最终转到WPF,或者是否将维护和改进这两种技术。 (或者,他们只是在等下去看看它是如何做出决定的?)
目前,WPF似乎不一定是用于在UI中不需要额外花哨的line of business应用程序的最佳方式。但是,最好知道WPF是否是我们迟早要接受的东西。
答案 0 :(得分:53)
这部分是一个合理的论据,部分是一种令人心碎的咆哮......
WinForms基于自现代Windows诞生以来一直存在的user32 / GDI技术。从句子的所有意义上说它都不会去任何地方:它不会得到新的特征;它不会得到支持。
或者它可能会。 .NET 4.0中的图表API是新的,为GDI而不是WPF编写。
一般而言,Microsoft的新技术历史如下:
RDO - > DAO - > ADO - > ADO.NET - > LINQ to SQL - >实体框架,在一些ODBC中折腾......有一个“死”的宝库和包裹的技术仍然可用并且至今仍然存在。这些是数据访问技术,但同样的想法适用; UI框架持续时间更长,因为它们是应用程序中最明显的区域。
如果我戴上我的Nostradomus帽子,我可以肯定地说,当.NET,哦,6.0在2015年出局时 - 听起来很远但是和我们一样接近2003年 - WPF将会“死” “作为Windows Forms,因为将创建一些其他漂亮的托管界面,以平滑所有尚未发现的错误和WPF的不便。谁在乎?我们今天所讨论的一切都将被弃用。 (无论如何,必须在.NET 5.0中提供一些东西,因为框架变得非常大。)
如果有的话,那么Windows Forms的目标就是它基于已经存在了十多年的技术,而且惯性不会很快消失:你输入的浏览器使用的是GDI,任务栏正在使用GDI,您的即时消息应用程序正在使用GDI,Windows 7中的新功能区控件正在使用GDI,坐在办公桌前的60美元打印机正在使用GDI打印机驱动程序,手机上运行的Windows CE应用程序运行端口Windows窗体和GDI,Windows Vista中的新事件查看器使用Windows窗体,Windows窗体平台背后有一个庞大的第三方组件社区 - WPF是一个非常小的小众产品,只存在于托管世界中,这本身比它的非托管对手小。
为此,我觉得所有这些“WinForms与WPF”的讨论都是不成比例的。这些技术不是互相排斥或劣质/优越,正如微软营销可能让我们相信的那样,微软的开发人员足够聪明地实现这一点。它们完全不同,其中一个恰好比较老。如果我们没有定期考虑这个问题,那么我们将在2005年全部听取Gartner并停止完全构建Windows应用程序并将所有内容移动到Web上的AJAX ...使用我们的SOA接口......暴露了另一个REST接口。在该后端使用TDD DDD模型......由ORM从数据库中抽象出来。
由于担心其弃用而急于放弃技术只能向我们的客户保证,我们将在编程软件解决方案中保持不断的经验和无能。
WPF是未来的一部分,当然,但不是未来。就我个人而言,我正在试图看看WPF是否在UI技术意义上“使其成为”以前的数据访问技术还没有,尽管Visual Studio在2010年采用它是一个非常令人欣慰的迹象,微软实际上认真对待它在一个旗舰产品中哄骗它。
总结一下:如果你正在构建一个LOB应用程序,我不会对使用WinForms感到内疚。如果您需要高级布局方案,则始终可以使用WPF互操作,就像偶尔使用Flash对象增强常规Web站点一样。但是对于其他任何事情,你应该向你的客户提出一个将整个团队和shell转换为WPF的好理由; Windows Forms存在问题,但与任何平台争夺的一半是知道是的问题和限制,并且世界上大多数人(包括Microsoft)仍在学习WPF。
答案 1 :(得分:5)
WinForms不会被弃用,直到Win32 ......这可能是相当长的时间!
(记住WinForms基本上是对Win32的抽象)
另一方面,WPF对Win32几乎没有直接依赖性,因此可能构成未来版本Windows上“全新启动”UI层的基础。在这一点上,我认为Win32(以及WinForms)将完全被抛弃,只能通过虚拟化获得。正如我所说,这可能会一路走下去:)答案 2 :(得分:4)
Microsoft对.NET Framework及其中所有类的支持策略是在发布后的主流支持5 + 5:5年,然后提供5年的扩展支持或收费。
随着.NET 4.0更新(包括2009年发布的所有WinForms内容),您将获得5年的主流支持,到2014年将在.NET 4.0上构建任何WinForms应用程序。
.NET 4.0之后的任何内容都可能包括WinForms,在这种情况下,时钟会重置。
此5 + 5政策适用于所有与业务相关的基础架构软件:Windows,Windows Server,SQL Server,Visual Studio,.NET等。
关键是,您不必担心缺少对WinForms的支持。
但是,之前的海报是正确的 - 进步到WPF。
答案 3 :(得分:2)
我不会过分担心长期支持。 WPF可能最近得到了所有的爱,但有太多的WinForms代码放弃支持。毕竟,即使MFC仍在使用每个Visual Studio版本进行更新。
答案 4 :(得分:1)
我认为Windows Forms将继续由Microsoft维护,但仅在很小的方面进行了改进。所有热门的新创新都将转向WPF。 Windows窗体与LINQ to SQL处于类似的位置。 LINQ to SQL是一个紧凑,紧凑,快速ORM,非常棒,但是微软正在重视Entity Framework。
Windows Forms非常适合它,它的用途是什么,它是小型,紧密包装的应用程序。它还有很多年的生命。
如果您想要一个能够(更多)轻松在Web界面,WPF界面或Silverlight(甚至是Flex)界面之间移植的应用程序,Windows Forms可能不适合您。这些其他接口使用基于标准的标记,以及一种更适合企业开发的体系结构。
答案 5 :(得分:0)
几年前我去了Redmond的WPF预览营,我向其中一个使用Crossbow(WPF / Windows Forms互操作)的人提出了同样的问题。他的回答是Windows Forms将在可预见的未来得到支持,但不能保证。
鉴于此,我认为您可以将您的应用程序基于Windows Forms,因为您知道您将对.NET的下一个版本或两个版本(例如,3 - 5年)提供一定程度的支持。
考虑到微软继续支持Win32,我个人会打赌接近10年。每次发布时,您可能无法获得大量新功能,但您也不会被丢弃。
无论如何,我实际上会更关注微软从富客户端技术向基于网络的技术的转变,但不足以忽视在任何一种情况下创建引人注目的应用程序的机会。
答案 6 :(得分:0)
我当然不会把WinForms称为死...但我也不会在其中写一个新项目。出于各种原因,我会使用WPF编写所有新项目。最大的问题是,如果您使用WPF / XAML,您对Silverlight的移植工作将变得更加容易。