对于一个全新的应用程序,使用WPF比Windows Forms更好吗?我之前使用过Windows Forms,但不太了解WPF。据我所知,WPF是Windows Forms的继承者,对吧?
该应用程序将托管DirectX窗口(不是WPF 3D,而是Managed DirectX和SlimDX),并且还有许多自定义控件。
编辑:该应用程序是一个与3D相关的应用程序,编辑器,类似于 modo:
对于一个全新的应用程序,使用WPF比Windows Forms更好吗?我之前使用过Windows Forms,但不太了解WPF。据我所知,WPF是Windows Forms的继承者,对吧?
该应用程序将托管DirectX窗口(不是WPF 3D,而是Managed DirectX和SlimDX),并且还有许多自定义控件。
编辑:该应用程序是一个与3D相关的应用程序,编辑器,类似于 modo:
大约9个月前,我们曾处理过这个问题。我们决定选择WPF,并且到目前为止我们对这个决定感到满意。是的,有一个学习曲线。这个曲线相当陡峭,特别是从WinForms转换过来,需要遗忘很多内容。我也建议您要有设计师的支持,否则您的应用程序可能看起来有点糟糕。此外,要准备好一些WPF的小坑,这会让你花费数小时来思考“为什么这么难”。
但WPF已经领先一步了。数据绑定、模板化和完全控制窗口外观的能力让你认为这就是WinForms最初应该具备的功能。
哦,对了,要为一些缺失的控件花费一些美元做好准备。例如缺少日期选择器以及在树形控件上添加复选框(实际上可以将其模板化,但在这方面它不如winforms那样简单)。幸运的是,3.5 SP1现在包括一个网格控件。
我肯定还有很多遗漏的地方,但这是我能够脱口而出的内容。
祝你好运!
我知道这是一篇旧文章,但我认为这仍然是一个有效的问题。
我在第一家公司工作的三年中使用了WinForms。那里有一些非常优秀的程序员,他们找到了一些非常聪明的方法来做一些非常酷的事情。WinForms经受住了时间的考验。它是一个坚实、可靠和高效的平台。许多人和许多公司,无论大小,都已经使用WinForms多年,这项技术一次又一次地证明了自己。即使你是微软,这种惯性也很难对抗。
不过,WPF肯定是未来。微软通过推出诸如Visual Studio 2010和Expression Blend等产品来表明了这一点。(在内部项目中使用WPF,微软被迫解决了许多问题,例如字体呈现和速度问题,这些问题阻碍了人们最初采用它。Visual Studio 2010表明WPF长期以来一直准备好了生产。
那么,在WinForms或WPF中编写程序哪个更好呢?答案是:WPF。我说这个原因有两个。首先,因为微软在内部支持它,我们可以认为它将存在很长一段时间。微软向我们展示了它是下一个选择的工具,这导致了我的下一个观点:它已经变得优于WinForms(一些我交谈过的人不同意,但这仍然是事实,并且每天变得更加明显)。WPF有许多WinForms永远不会拥有的功能,例如集成支持惊人的数据绑定和基于时间轴的动画,使您可以轻松制作应用程序的惊人主题,并且将让设计师乐意更换。WPF比评论中描述的还要多得多,但对我来说这是两个重要的方面 :)
话虽如此,我知道在WPF中你所不能做的事情在WinForms中也都能够完成。如果你足够努力,你可以用任何语言做任何事情。但是,WinForms会让你在谷歌上搜索如何实现一些酷炫的功能,而WPF则内置了所有微软认为是Windows未来的功能,并将它们直接放在你的指尖。
随着时间的推移,人们会习惯于直接构建到Windows中的新功能,并期望它们在他们使用的所有应用程序中可用。这将达到一个程度,在这个程度上,不支持这些功能的任何东西都会感觉笨拙、不够易用,并且似乎不值得花钱购买。(我认为触摸集成是最明显的例子。尽管有一些触摸屏解决方案可以夹在显示器上并模拟鼠标,在任何计算机上,触摸屏技术已经走了很长的路,随着Windows 8模糊了桌面和移动设备之间的界限,人们很可能希望以一种异常难以实现的方式使用应用程序,如果你的应用程序使用WinForms,则会遇到困难。)
早晚,我相信对WinForms的支持和开发将会停止,那些落后的人将被迫进行移植,并且要快速。然而,有太多的程序依赖于WinForms,以至于微软无法在不久的将来放弃它。谁知道会发生什么。也许对于微软来说,WinForms就像英特尔的Itanium处理器一样,虽然有更好的解决方案可用,但有足够的用户使用它以保持其运行。(http://arstechnica.com/business/news/2011/06/ask-ars-why-itaniumask-ars-with-xeons-improvement-why-bother-with-itanium.ars)----编辑2-----
考虑到你想制作一个类似你展示的那样的编辑器,我更推荐使用WPF。我的当前项目也有许多类似的特性,并且我们已经决定,将WPF与Direct3D内容组合的能力非常强大。能够将场景渲染到任何地方是很好的 - 不仅仅是矩形窗口。在WinForms中,你基本上只能限制在一个矩形内,而且在那里还存在空间问题(例如当菜单拉过hwnd时出现闪烁问题等)。带有D3DImage的WPF合成器消除了所有这些问题,并允许您构建非常灵活的UI。例如,在WPF3D对象的侧面实时渲染您的场景是可能的,或者直接在您的d3d场景顶部使用WPF控件,而不是尝试在D3D中进行GUI等。
-----原始---------
如果您要托管DX,您可能需要考虑它 - 特别是因为如果您使用D3DImage,它使您能够在UI中进行场景组合而没有空间问题。
这可以与SlimDX和WPF一起使用。
----编辑-----
有关使用Winforms进行Direct3D的缺点以及WPF / DX集成的优点的更多信息,请参见:
如果你要编写大量的自定义控件,我建议选择WPF。 WPF的设计部分是可扩展的、组合的,结果就是编写自定义控件非常简单。
我在WinForms中编写过一些自定义控件,有时可能会很具有挑战性。布局真的需要花费很多时间。 我的几个周末都用来做WinForm控件布局了。 在WPF中编写同等的控件却是小菜一碟。
我最近刚完成了一个类似的产品(用于在WPF中挖掘数据的3D查看器),我强烈推荐使用WPF/SlimDX。
工具有点松散(特别是Visual Studio),但是使用WPF可以更轻松地制作具有一定亮点的应用程序,而不是大多数东西都默认为灰色控件。
使用3.5SP1中的D3DImage非常容易在控件内部托管SlimDX设备。
总体而言,我认为WPF并不是更好的选择,只是不同。某些方面更好,某些方面则更差。但它绝对是未来。
值得一提的是,现在已经是2020年了,我曾经使用过MVVM和Windows Forms编写桌面应用程序。我必须说,我不想再写WPF的样板代码,例如转换器类、使用某种事件中介来在视图之间进行通信、命令等。使用MVVM Light可以解决这个问题。我喜欢WPF/MVVM中代码的清晰分离,但对于小型项目,我认为能够非常快速地推出Windows Forms应用程序的能力是不可低估的。对于图形密集型应用程序,WPF的性能优于Windows Forms。
现在,我倾向于尽可能使用Web开发,因为Web随时随地都可以连接到网络。当然,Web开发通常需要较长的产品交付时间。积极的一点是,你已经掌握的C#知识可以转化为ASP.NET开发。