在Windows窗体上使用WPF更好吗?

时间:2009-03-12 21:49:05

标签: c# .net wpf winforms user-interface

对于全新的应用程序,使用WPF而不是Windows Forms更好吗?我之前使用过Windows Forms但WPF并不多。据我所知,WPF是Windows Forms的继承者,对吗?

该应用程序将托管具有大量自定义控件的DirectX Windows(不是WPF 3D,但是Managed DirectXSlimDX)。

编辑:该应用程序是一个3D相关的应用程序编辑器,例如modo

Image created using the 3D painting program modo.

11 个答案:

答案 0 :(得分:18)

我们在9个月前处理过这个问题。我们决定选择WPF,到目前为止我们对这个决定感到满意。是的,有一个学习曲线。这是相当可观的,特别是来自WinForms,你有很多东西要忘掉。我还建议您访问设计师,否则您的应用程序可能看起来有点破旧。还要为一些WPF陷阱做好准备,让你花费数小时时间试着说'为什么这么难'。

但WPF领先一步。对您希望窗口外观的数据绑定,模板化和完全控制使您认为WinForms应该是最初的。

哦,是的,并准备为一些缺失的控件支付几美元。有一些东西丢失了,比如日期选择器和树控件上的复选框(你可以实际模板化,但在这方面它并不像winforms那么简单)。幸运的是,3.5 SP1现在包含一个网格控件。

我确定我错过了一堆,但这就是我能想到的最好的东西。

祝你好运!

答案 1 :(得分:16)

答案 2 :(得分:11)

----编辑2 -----

鉴于您正在尝试制作一个类似您所展示的编辑器,我建议更多地使用WPF。我当前的项目也有许多功能,我们已经决定将WPF与Direct3D内容进行复合的功能非常强大。很高兴能够将场景渲染成任何东西 - 而不仅仅是一个矩形窗口。在WinForms中,你几乎只限于一个矩形,你也有空域问题(微妙的,但是当菜单拉过你的hwnd时会出现闪烁问题等等)。具有D3DImage的WPF合成器摆脱了所有这些问题,并让您利用您的想象力构建一个非常灵活的UI。可以在WPF3D对象的一侧实时渲染场景,或者直接在d3d场景上使用WPF控件,而不是尝试在D3D等中执行GUI。

-----原始---------

如果您要托管DX,您可能需要考虑它 - 特别是因为它使您能够使用UI进行场景合成,如果使用D3DImage则无空域问题。

这适用于SlimDX和WPF。

---- ----- EDIT

有关将Direct3D与Winforms一起使用的缺点以及WPF / DX集成的优势的更多信息,请参阅:

MSDN Article on Airspace

Codeproject arcticle on intro to D3DImage

答案 3 :(得分:6)

我发现,一旦掌握了Expression Blend和WPF,我在构建UI方面比使用Windows Forms更有效率。在我看来,这是新技术/工具的最重要因素之一;如果你使用新工具无法更快地获得与旧工具相同的结果,那么你只使用10%的时间的所有花里胡哨都无法弥补它。

除此之外,WPF还有其他优势:

  • 在XAML中使用界面可以更轻松地微调所有这些晦涩的属性,或者将一个控件的整个部分剪切并粘贴到另一个控件中,

  • WPF使界面模块化更容易,通过控制打破屏幕控制。表格在某种程度上可以做同样的事情,但我总觉得它是一场战斗,

  • 一些钟声和口哨都很酷。我发现使用动画(故事板)对于数据输入屏幕非常有用,根据所选择的产品,您需要不同的输入框。使用表单,您必须为每个数据输入屏幕创建一个单独的面板/表单,使用WPF我使用动画来隐藏和移动各种文本框。

答案 4 :(得分:4)

如果您正在编写大量自定义控件,我会选择WPF。 WPF设计的一部分是可扩展,可组合,结果是编写自定义控件很简单。

我已经在WinForms中完成了一些自定义控件编写,它可能会非常引人注目。布局真的需要一些时间远离你。我生命中的几个周末都付给了WinForm控件布局。在WPF中编写等效控件很简单。

答案 5 :(得分:3)

我们刚刚经历过这个......我们开始通过WinForms迁移到WPF。我认为现在将WinForms放在你身后是一个非常容易的决定。工具越来越好,如果你能在你的团队中找到一个真正的设计师,那么你就无法将它们放在一起。

我们开始意识到我们的未来实际上不是WPF,而是Silverlight。随着Silverlight的成熟,它越来越与WPF相提并论,它允许您运行跨平台。 Silverlight的路径更像Adobe Air,有一天它会在浏览器之外生存(实际上你现在可以做到,但这很痛苦)。我真的认为.NET UI的未来将是Silverlight。

答案 6 :(得分:2)

在这种情况下,我会说跟随您的供应商(即微软)的领导。他们自己的内部制作越来越多地使用WPF它的范围(想想Silverlight)和深度明显大于WinForms。他们也越来越多地参考最佳实践。从所有证据(这里和其他地方),它似乎已准备好进行黄金时段的发展。

你对WinForms没有特别的关注(我猜想有什么基于熟悉程度)。你最终需要切换。一个新项目将是一个开始这个过程的好地方,其他一切都是平等的。

答案 7 :(得分:2)

刚刚完成了一个非常相似的产品(用于在WPF中挖掘数据的3d查看器)我绝对可以推荐WPF / SlimDX。

这些工具有点松懈(特别是Visual Studio),但是WPF使用一些Zing制作一个应用程序变得更容易,而不是大多数东西都有的默认控件灰色。

使用3.5SP1的D3DImage,可以很容易地在控件中托管SlimDX设备。

总的来说,我认为WPF不是更好用,只是不同。有些事情比较好,有些情况更糟。但这绝对是未来。

答案 8 :(得分:1)

  

AFAIK WPF是WinForms的继承者,对吧?

我不相信这是真的,就像MS想要推动这一点一样。 Winforms上写的遗留代码太多,因此在近乎甚至遥远的未来都是一个现实的东西。

所以考虑到这一点,如果您愿意,并且能够花时间学习WPF,我会这样做。否则我会使用Winforms。

答案 9 :(得分:1)

在你的情况下,WPF是有道理的。对我来说,它是应用程序选择的应用程序,因为在Windows窗体中可以做很多事情(比如快速开发业务应用程序)。我正在使用WPF为媒体中心应用程序编写一个漂亮的GUI(我的50英寸等离子屏幕上的媒体控制台的个人项目)。

但是,如果我正在编写数据输入和显示应用程序,我通常会使用Windows Forms来提高开发速度。 XAML编辑器在Visual Studio 2010中更好,但还有很长的路要走。如果没有引用,很多属性属性都没有IntelliSense帮助,因此不可能知道它们中的内容(这是我花费大量时间尝试通过网络上的书籍或示例来查找这些值的地方) 。也就是说,如果你做WPF写,你可以创建一些非常引人注目的用户界面。

答案 10 :(得分:1)

它的价值是2020年,我已经使用MVVM和Windows Forms在WPF中编写了桌面应用程序。我必须说,我不会错过为WPF编写样板代码的代码,例如Converter的类,使用某种事件介体在视图,命令等之间进行通信。使用MVVM Light可以解决该问题。我喜欢WPF / MVVM中代码的清晰分离,但是对于小型项目,我认为快速推出Windows Forms应用程序的能力不可低估。对于图形密集型应用程序,WPF的性能将优于Windows窗体。

这几天,我倾向于尽可能地进行Web开发,因为只要有网络连接,就可以使用Web。当然,Web开发通常也需要较长的产品交付时间。一个积极的方面是,您已经知道的C#可以转换为ASP.NET中的开发。

相关问题