这部分是合理的论点,部分是发自内心的咆哮......
WinForms 基于自现代 Windows 诞生以来就存在的 user32/GDI 技术。从任何意义上来说,它都不会去任何地方:它不会获得新功能;它不会失去支持。
也许它会。 .NET 4.0 中的图表 API 是新的,并且是为 GDI 而不是 WPF 编写的。
总的来说,Microsoft 的新技术发展历程如下:
- 发明新的 API。
- 使用该 API 进行 2 或 3 个产品周期的创新。
- 意识到继续创新意味着对向后兼容性做出不合理的让步,或者意识到该技术最初并未解决。
- 通过包装或保留现有 API 来发明新的 API。现有的 API 不会消失,但新的东西也不会使用它。
RDO -> DAO -> ADO -> ADO.NET -> LINQ to SQL -> 实体框架,折腾一些 ODBC ......有一个“死”和包装技术的宝库,它们仍然可用并且仍然可用今天存在。这些是数据访问技术,但同样的想法也适用; UI 框架的使用时间更长一些,因为它们是应用程序中最显眼的区域。
如果我戴上我的 Nostradomus 帽子,我可以肯定地说,当 .NET,哦,6.0 在 2015 年发布时——这听起来很遥远,但与 2003 年一样接近——WPF 将“死” ” 作为 Windows 窗体,因为将创建一些其他漂亮的托管界面,以消除 WPF 的所有尚未发现的错误和不便。谁在乎?到那时,我们今天喋喋不休的一切都将被弃用。 (无论如何,在 .NET 5.0 中必须做出一些让步,因为框架变得非常大。)
如果有的话,Windows Forms 的目标是它基于已经存在了十多年的技术,并且这种惯性不会很快消失:您输入的浏览器正在使用 GDI,任务栏正在使用 GDI,您的即时消息应用程序正在使用 GDI,Windows 7 中的新功能区控件正在使用 GDI,您办公桌上 60 美元的打印机正在使用 GDI 打印机驱动程序,您手机上运行的 Windows CE 应用程序运行一个端口Windows Forms 和 GDI,Windows Vista 中的新事件查看器正在使用 Windows Forms,并且在 Windows Forms 平台背后有一个庞大的第三方组件社区——WPF 是一个非常小的、仅存在于托管世界中的小众产品,它本身比它的非托管对应物要小。
为此,我觉得所有这些“WinForms vs. WPF”的讨论都在夸大其词;正如微软营销可能让我们相信的那样,这些技术并不相互排斥或劣势/优越,而且微软的开发人员足够聪明,可以实现这一点。它们只是不同,其中一个恰好更老。如果我们不定期考虑这一点,我们都会在 2005 年听取 Gartner 的意见,并完全停止构建 Windows 应用程序,并将一切都转移到 Web 上的 AJAX 上……使用我们的 SOA 接口……公开一个替代的 REST 接口…… . 在该后端使用 TDD DDD 模型...由 ORM 从数据库中抽象出来。
因为害怕被弃用而如此急切地放弃一项技术只会让我们的客户确信,我们将在编程软件解决方案方面保持持续水平的缺乏经验和无能。
可以肯定,WPF 是未来的一部分,但它不是未来。就个人而言,我正在观望 WPF 是否在 UI 技术意义上“成功”,而以前的数据访问技术没有,尽管 Visual Studio 在 2010 年采用它是一个非常令人欣慰的迹象,表明微软实际上是认真对待它的在旗舰产品中进行测试。
总结一下:如果您正在构建 LOB 应用程序,我不会对使用 WinForms 感到内疚。如果您需要高级布局方案,WPF 互操作始终可供您使用,就像偶尔使用 Flash 对象增强常规网站一样。但是对于其他任何事情,您应该为您的客户提出一个将整个团队和外壳转换为 WPF 的充分理由; Windows 窗体有它的问题,但与任何平台的一半战斗是知道问题和限制是什么,而且世界上大多数人(包括 Microsoft)仍在学习 WPF。