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

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

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

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

使用3D绘图程序modo创建的图像。

—-编辑2 —–

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

– – -原版的 – – – – –

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

这适用于SlimDX和WPF。

– – 编辑 – – –

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

关于空域的MSDN文章

Codeproject arcticle介绍D3DImage

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

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

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

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

祝好运!

我知道这是一个老post,但我认为这仍然是一个有效的问题。

我在我工作的第一家公司使用WinForms 3年。 那里有一些非常优秀的程序员,他们找到了一些非常聪明的方法来做一些很酷的事情。 WinForms经受住了时间的考验。 它是一个坚实,可靠和高效的平台。 许多人,以及许多大小公司多年来一直在使用WinForms,而且这项技术已经一次又一次certificate了自己。 即使你是微软,像这样的惯性很难打。

不过,WPF绝对是未来。 微软通过使用Visual Studio 2010和Expression Blend等产品做到了这一点。 (在将WPF用于内部项目时,微软被迫解决许多问题,例如字体渲染和速度问题,这些问题阻止人们首先采用它.Visual Studio 2010显示WPF早已为生产做好准备。

那么,用WinForms或WPF编写程序会更好吗? 答案是这样的:WPF。 我说这有两个原因。 首先,因为微软在内部支持它,我们可以假设它会存在很长一段时间。 微软向我们展示了它是下一个选择的工具,它引导我进入下一点:它已经变得优于WinForms(我说过的一些人不同意,但它仍然是事实,而且每天都变得越来越明显) 。 WPF具有WinForms(可能)永远不会给出的许多function,例如集成支持惊人的数据绑定,以及基于时间轴的动画,可以轻松地为您的应用程序制作出令人惊叹的主题,并且将让设计人员乞求切换。 WPF比评论中描述的要多得多,但这对我来说是两大问题:)

这就是说,我知道在WPF中你无法做任何你在WinForms中无法做到的事情。 如果你想要的话,你可以用任何语言做任何事情。 重点在于,WinForm将让你在谷歌搜索其他人做得很酷的事情,WPF附带内置支持微软认为是Windows未来的所有function,并将它们放在触手可及的位置。

随着时间的推移,人们将习惯于直接构建到Windows中的新function,并期望它们可以在他们使用的所有应用程序中使用。 这将达到这样的程度,即任何不支持它们的东西都会变得笨拙,不太可用,而且似乎不值得花钱。 (我认为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的日子已经结束,虽然没有人能确定会发生什么,但遗留产品的支持将会被取消一旦可以certificate合理。 即使WinForms应用程序保存了很多年,重要的是要记住时代在变化,我们都需要随之改变。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

AFAIK WPF是WinForms的inheritance者,对吧?

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

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

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

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