WPF 或 Windows 窗体
Posted
技术标签:
【中文标题】WPF 或 Windows 窗体【英文标题】:WPF or Windows Forms 【发布时间】:2011-02-10 17:24:33 【问题描述】:我已经玩了大约一年的 C# 控制台应用程序,我想继续创建 GUI 应用程序。除了基本的 Java 应用程序之外,我从未做过任何 GUI 开发,但我想继续使用 C#。我应该开始学习 Windows 窗体还是直接跳到 WPF?有很大的不同吗? WPF 是建立在 Windows 窗体之上还是完全不同?
【问题讨论】:
我觉得这个网站很有趣:educba.com/winforms-vs-wpf 【参考方案1】:如果您刚刚开始,请直接跳入 WPF。
它将允许您开始使用标记来定义界面来制作丰富的界面,而无需教您从 Windows 窗体中学到的可能的坏习惯(对于 WPF)。
【讨论】:
+1 我完全同意。 WPF 比 Windows 窗体灵活得多,它是 GUI 开发的长期工具。在使用基于 XML 的布局方面,它非常接近 html。现在,Windows 窗体的最佳论据是,如果您有一个拥有丰富使用它的经验的开发团队。 WPF 是未来,它已经超越了 Windows 窗体。 +1 但是,由于以前版本中的字体问题,WPF 只能在 .NET 4.0+ 中使用,因此在应用程序部署时请记住这一点。 @Fauxide WPF 在 .NET 3.5 中可用。已经构建了许多有用的应用程序......字体问题并不是每个人的阻碍。 +1 - 多年来完成 WinForms,现在在 WPF 中。永远不要回头 ;) WPF 更好,更快。多年来在 winforms 中只使用 3rd 方控件 - 现在我使用它们,但不仅仅是(即标准控件可用,3r 方不是替代品,而是新东西)。特别是使用 .net 4.0 - wpf 岩石。哦,我做高性能数据可视化(又名金融工具交易应用程序)。 +1 WPF 的学习曲线有点陡峭,但是一旦你学会了它,它就会非常强大。不过,请确保您从 MVVM 模式开始,这很有意义。【参考方案2】:这两种是完全不同的技术。它们确实为两个方向提供了一些互操作层,但除此之外没有任何共同点。 Windows Forms 或多或少是Win32/MFC 之上的轻量级包装器,这意味着它在.NET 中的可扩展性在所有情况下都不是那么好。 WPF 是一个从头开始实现的新 UI 框架。 WPF 在自定义现有类型方面也更加灵活。
但是,至少从我的经验来看,Windows Forms 似乎是业界更常用的桌面 UI 框架。虽然 WPF 提供 Silverlight 和 XBAP 应用程序,但 Windows 窗体不能用于 Web 开发。
如果您以前做过任何 UI 开发,我敢说 Windows 窗体更容易学习,因为它遵循更传统的编程范式。 WPF 的编程模型与此完全不同。虽然 WPF 的使用方式与 Windows 窗体相同,但它的大部分好处只有在您接受 WPF 提供的数据绑定和封装之后才能实现。
尽管有一些观点支持 Windows 窗体选择 WPF 而不是 Windows 窗体,但如果您只想学习一个 UI 框架,那么对我来说这将是一件轻而易举的事。它在各方面都优于 Windows 窗体。我只是希望整个软件行业能够更大规模地适应它! (尽管自从我们有了网络以来,就不再像其他人那样编写桌面应用程序了。)
【讨论】:
【参考方案3】:这两种技术各有优缺点。
WPF 更适合跨平台开发和创建“华丽”的 GUI。但是,它需要比 WinForms 更新的 .net 框架,并且需要兼容 dx9 或更高版本的 GPU(大多数人都会拥有)。
但是创建界面/连接所有事件等涉及更多。
WinForms 仍然是一项功能强大的技术,通常可以以比 WPF 更快的速度开发,但最终,两种技术都可以用来实现相同的目标。但是 WPF 是“更新的” ' 标准。
WinForms 通常用于开发业务应用程序,而 WPF 通常用于创建更多基于最终用户的软件、应用程序等。
【讨论】:
【参考方案4】:WPF 提供了非常丰富的工具来构建极其复杂的用户界面。它简化了在您的界面中集成硬件加速图形。但是,Visual Studio WPF 设计器真的很糟糕(我几乎从不使用它)。我也认为WPF要复杂得多,入门也比较困难。但这当然是主观的。
【讨论】:
以上是关于WPF 或 Windows 窗体的主要内容,如果未能解决你的问题,请参考以下文章
在 C# WPF 或 Windows 窗体应用程序中使用 DirectX c++ DLL
是否有适用于 Windows 窗体的 Snoop (WPF) 或 FireBug (ASP.NET) 之类的东西? [关闭]
WPF 等效于 Application.AddMessageFilter(Windows 窗体)