WinForms转WPF - 我们如何从这里开始?

14
有没有一种 实际可行 的方法,让我们在不创建奇怪的交互场景而导致支持困难的情况下,逐步将 WinForms 应用程序演进为 WPF 应用程序呢?
背景信息:
我们有一个大型的灰色 WinForms 应用程序,由内部约 60-75 名用户密集使用。我们开始发现一些地方可以从将应用程序转换为 WPF 中受益,但这还不足以证明需要完全重写它的大型项目。该应用程序中的所有屏幕都是独立的 WinForms 用户控件,WinForms 应用程序只是处理菜单、打开/关闭表单、提供一些共享辅助方法等的外壳。
到目前为止,我们最好的想法是将外壳应用程序转换为 WPF,然后在其中托管 WinForms 用户控件。我们认为,随着时间的推移,我们可以逐步转换用户控件,将这些更改与具有足够业务价值以支持额外工作的倡议联系起来。我担心交互操作的有效性以及它会如何影响性能。我也担心我们如何过渡到应用程序的新外观。让外壳应用程序看起来很时尚,然后在其中托管旧的灰色用户控件似乎很奇怪,而且在 WPF 中创建外壳应用程序并使其看起来与 WinForms 相同也很奇怪。
如果 Caliburn、Prism 或其他类似框架之一有助于实现过渡,我们也愿意探索这些选项。
2个回答

11
我们曾经处于类似的情况,选择了以下路径:一开始我们在应用程序外壳(仍为WinForms)中托管了几个WPF窗口。当然,这有些显著的差异,但我们通过调低新窗口的亮度来故意减小差异。我们想到,等到剩余的窗口/控件被转换时,由于UI将完全是WPF,我们可以让图形设计师基于XAML进行魔法般的设计,因此更容易“升级”到更生动的体验。

现在我们已经达到了大多数窗口都是WPF的地步。我们已经开始将WinForms外壳应用程序转换为基于WPF的外壳应用程序,以托管剩余的WinForms。我们仍然有一些沉闷的颜色,但用户已经开始注意到差异,虽然它很小,但我们的用户仍然喜欢这种增量的积极变化。不久之后,我们将退役最后一个WinForm。那将是我们释放图形设计师的点!

至于性能:我当然无法对此做出一般性的陈述,因为它严重取决于您特定的控件/窗口。在我们的产品中(几百个窗口),我们没有发现任何与WPF和WinForms混合相关的重大性能问题。

我们没有研究任何框架,所以恐怕无法对此发表评论。


1
+1 这很好地描述了我的经验。此外,这里有一个有趣的 PDC 会话,介绍了如何使用 NET Framework 4 interop 实现 Visual Studio 2010:http://microsoftpdc.com/2009/CL09 - Ray Burns
1
我不确定这个问题是否有一个“正确”的答案,但我认为这是我们最有可能采取的方法。 - Paul G
在这一切由企业支付的努力中,你是否为最终用户提供了任何新的有用功能,还是只是在制作好看的东西时玩得开心? - smirkingman
@smirkingman 有时候你不能只是把所有东西都扔掉,重新开始。同样,如果你需要发布产品,你也不能保持很长时间的沉默。那么你可能会有这个混合解决方案很长一段时间。价值在于:你仍然拥有一个可以销售的产品。客户知道该产品正在采用新技术。即使功能保持相似,价值也可以以许多不同的形式出现,例如保护现有投资。我很想一次性改变一切。但是商业现实存在。 - Manfred

4
很好的问题,目前WPF中的大部分工作都是将旧的WinForms应用程序转换为WPF。从我的经验来看,最好的情况是根据旧的应用程序/要求从头构建应用程序。幸运的是,我曾参与过一个项目,我们重写了这个应用程序,我相信这比混合两个应用程序花费的时间/投资更少。
我个人认为,如果我们试图混合两者,那么会造成麻烦。另一个问题是,设计混合应用程序效率会很低。
在我的当前项目中(这是一个已运行了10年的大型项目),我们正在按模块的基础上逐步转换应用程序。幸运的是,我们的应用程序由各种较小的应用程序组成,因此逐一转换它们更容易。对于您的情况,我建议您识别可以完全转换为WPF的区域,并开始在WPF中构建它们,如此处所建议:
Windows Forms - WPF互操作性FAQ: http://windowsclient.net/learn/integration.aspx 我还建议使用一些工具将Windows Forms转换为XAML(WPF);这肯定会帮助您节省一些时间。
Windows Forms到WPF转换器: http://wf2wpf.codeplex.com/ Windows Forms到XAML转换器: http://www.ingeniumsoft.com/Products/WinForm2XAML/tabid/63/language/en-US/Default.aspx Windows Forms到Windows Presentation Foundation转换器: http://www.spiderwan.com/spiderwan/ConvertWinFormToWPF/WinFormToWPF.aspx

1
我通常更喜欢John所描述的增量转换方法,但同意有时从原始需求重新编写也是有道理的。然而,我强烈反对Paul G查看Windows Forms到WPF转换工具:使用这些工具的人最终得到的应用程序比Winforms应用程序更难以维护。如果正确完成,WPF应用程序比等效的Winforms应用程序要简单得多,易于维护。花费时间创建高质量的视图模型和XAML将得到十倍的回报,特别是在进行重写时。 - Ray Burns
明白了,自己设计视图模型和XAML肯定会更好。我只是想让保罗知道有可用的选项(为了节省时间显然)。 - akjoshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接