对于一个全新的应用程序,使用WPF而不是Windows Forms更好吗?我之前使用过Windows Forms但WPF并不多.据我所知,WPF是Windows Forms的继承者,对吧?
该应用程序将托管具有大量自定义控件的DirectX Windows(不是WPF 3D,而是Managed DirectX和SlimDX).
编辑:该应用程序是一个3D相关的应用程序,编辑器,如modo:
我们在9个月前处理过这个问题.我们决定选择WPF,到目前为止我们对这个决定感到满意.是的,有一个学习曲线.这是相当可观的,特别是来自WinForms,你有很多东西要忘记.我还建议您访问设计师,否则您的应用程序可能看起来有点破旧.还要为一些WPF陷阱做好准备,这会让你花费数小时时间试着说"为什么这么难".
但WPF领先一步.对您希望窗口外观的数据绑定,模板化和完全控制使您认为WinForms应该是最初的.
哦,是的,并准备为一些丢失的控件支付几美元.有一些东西丢失,比如日期选择器和树控件上的复选框(你可以实际模板化,但在这方面它并不像winforms那么简单).3.5谢谢你现在包含一个网格控件.
我确定我错过了一堆,但这就是我能想到的最重要的东西.
祝好运!
我知道这是一个老帖子,但我认为这仍然是一个有效的问题.
我在我工作的第一家公司使用WinForms 3年.那里有一些非常优秀的程序员,他们找到了一些非常聪明的方法来做一些非常酷的事情.WinForms经受住了时间的考验.它是一个坚实,可靠和高效的平台.许多人,以及许多大小公司多年来一直在使用WinForms,并且该技术已经一次又一次证明了自己.像这样的惯性很难打,即使你是微软.
不过,WPF绝对是未来.微软通过使用Visual Studio 2010和Expression Blend等产品做到了这一点.(在将WPF用于内部项目时,微软被迫解决许多问题,例如字体渲染和速度问题,这些问题阻止人们首先采用它.Visual Studio 2010显示WPF早已为生产做好准备.
那么,用WinForms或WPF编写程序会更好吗?答案是这样的:WPF.我说这有两个原因.首先,由于微软在内部支持它,我们可以假设它将存在很长一段时间.微软向我们展示了它是下一个选择的工具,它引导我进入下一点:它已经变得优于WinForms(我说过的一些人不同意,但它仍然是事实,并且每天变得越来越明显) .WPF具有WinForms(可能)永远不会给出的一系列功能,例如集成支持惊人的数据绑定,以及基于时间轴的动画,可以轻松地为您的应用程序制作出令人惊叹的主题,并且将让设计人员乞求切换.WPF比评论中描述的要多得多,但这些对我来说是两大问题:)
话虽这么说,我知道你无法在WPF中做任何你在WinForms中无法做到的事情.如果你想要的话,你可以用任何语言做任何事情.重点在于,WinForm将让你在谷歌搜索其他人如何做一些很酷的事情,WPF附带内置支持微软认为是Windows未来的所有功能,并将它们放在触手可及的位置.
随着时间的推移,人们将习惯于直接构建到Windows中的新功能,并期望它们可以在他们使用的所有应用程序中使用.这将达到这样的程度,即任何不支持它们的东西都会变得笨拙,不太可用,而且似乎不值得花钱.(我认为Touch集成是最明显的例子.虽然有触摸屏解决方案可以夹在显示器上并模拟鼠标,但在任何计算机上,触摸屏技术已经走过了漫长的道路,并且Windows 8模糊了这条线在桌面和移动设备之间,如果您的应用程序使用WinForms,人们可能希望以一种特别难以实现的方式使用应用程序.)
迟早,我相信WinForms的支持和开发将会停止,并且每个留下自己的人将被迫快速移植.但是,有太多的程序依赖于WinForms for Microsoft能够在不久的将来放弃它.谁知道会发生什么.也许WinForms将向微软提供英特尔的安腾处理器,即使有更好的解决方案,该产品仍有足够的用户可以继续使用.(http://arstechnica.com/business/news/2011/06/ask-ars-why-itaniumask-ars-with-xeons-improvement-why-bother-with-itanium.ars)
所以我的建议是这样的:关于新开发,切换到WPF.派一些员工参加培训课程,或者让他们玩一会儿,这样他们就可以更好地感受这项技术.学习曲线将会很陡峭,但这样做会增加团队的技能,因为通过学习WPF,他们也将很好地学习SilverLight,这对于熟悉WPF的人来说足够类似于WPF快速学习,但是专为网络而不是桌面设计.这很有价值,因为在WPF中重写的应用程序将更容易转换为Web应用程序.WPF是新的,但它是出于某种原因而制作的,不仅仅是为了让人们学习别的东西.它旨在使应用程序更加用户友好,直观和便携.它旨在帮助开发人员使他们的应用程序适应新的计算机时代.
关于写的WinForms应用:我认为它是安全的假设,将WinForms的仍然相当长一段时间它已经获得了支持量仅仅是因为得到支持.我建议让你的团队熟悉WPF,然后慢慢开始将你的应用程序转移到WPF.花费微软允许的所有时间,不要急于整个过程,但要记住,WinForms日的各种方式已经结束,虽然没有人能确定会发生什么,但遗留产品的支持将被取消一旦它被证明是合理的.即使WinForms应用程序保存多年,重要的是要记住时代在变化,我们都需要随之改变.
----编辑2 -----
鉴于你正在努力创建一个像你所展示的编辑器,我建议更多地使用WPF.我当前的项目也有许多功能,我们已经决定将WPF与Direct3D内容进行复合的功能非常强大.很高兴能够将场景渲染成任何东西 - 而不仅仅是一个矩形窗口.在WinForms中,你几乎只限于一个矩形,你也有空域问题(微妙的,但是当菜单拉过你的hwnd时会出现闪烁问题等等).具有D3DImage的WPF合成器摆脱了所有这些问题,并让您利用您的想象力构建一个非常灵活的UI.可以在WPF3D对象的一侧实时渲染场景,
- - -原版的 - - - - -
如果您要托管DX,您可能需要考虑它 - 特别是因为它使您能够使用UI进行场景合成,并且如果使用D3DImage则不会出现空域问题.
这适用于SlimDX和WPF.
- - 编辑 - - -
有关将Direct3D与Winforms一起使用的缺点以及WPF/DX集成的优点的更多信息,请参阅:
关于空域的MSDN文章
Codeproject arcticle介绍D3DImage
我发现,一旦掌握了Expression Blend和WPF,我在构建UI方面比使用Windows Forms更有效率.在我看来,这是新技术/工具的最重要因素之一; 如果你不能用新工具更快地获得与旧工具相同的结果,那么你只使用10%的时间的所有花里胡哨都无法弥补它.
除此之外,WPF还有其他优势:
在XAML中使用界面可以更容易地微调所有这些晦涩的属性,或者将一个控件的整个部分剪切并粘贴到另一个控件中,
WPF使界面模块化更容易,通过控制打破屏幕控制.表格可以在一定程度上做同样的事情,但我总是发现它是一场战斗,
一些钟声和口哨很酷.我发现使用动画(故事板)对于数据输入屏幕非常有用,根据所选择的产品,您需要不同的输入框.使用Forms,您必须为每个数据输入屏幕创建一个单独的面板/表单,使用WPF我使用动画来隐藏和移动各种文本框.
如果您要编写很多自定义控件,我会选择WPF。WPF设计的一部分是可扩展的,可组合的,其结果是编写自定义控件非常简单。
我已经在WinForms中做了一些自定义控件的编写,这有时可能会很麻烦。布局确实需要花费一些时间。我一生的几个周末都花在WinForm Control Layout上。用WPF编写等效控件非常困难。