从Windows窗体迁移到WPF ......值得吗?

时间:2009-02-10 21:04:11

标签: wpf winforms

我还有一个用Windows Forms编写的桌面应用程序,它是一个中等大小(由数据库中的46个表支持的几十个主要表单)。我正在考虑重写WPF中的UI,但在我去那里之前,我很好奇是否有任何关于进行这种转换的战争故事。

我使用LLBLGen生成我的低级数据访问对象,并且我有一个业务逻辑层。表单是数据绑定到业务逻辑对象,尽管主表单使用缓存对象来最小化更常见的导航路径上的往返。 UI 从不直接与数据库对话:始终通过用户界面 - >业务逻辑 - >低水平 - >数据存储路径。

我大量使用的一个控件是TreeView,它可以作为视觉指南和短距离导航工具。树已大量定制图标,突出显示颜色,这是我最担心移植的控件。

是否有一个故事可能说服我继续进行转换(或者相反,等到微软接近从Windows窗体中拉出地毯)?

编辑:我在评论中被问到我有什么转换动机。我对未来的打样有些担忧:我有500,000行代码,最初是ASP和VBScript。我们已经将功能随着时间推移到ASP.NET和C#,但仅在我们对代码进行更改时。好处是我们保持成本最小化,缺点是代码仍然是ASP和VBScript的一半。我担心Windows Forms应用程序会出现类似情况。

我是否担心今天关于Windows Forms的消失?甚至没有接近它...但是应用程序正在从ASP和VBScript转移到ASP.NET和C#,已经有九年的历史了,并且可能在这十年内不会被取代(相反,它将会发展)。桌面应用程序同样是一个具有多年历史的长期项目。

7 个答案:

答案 0 :(得分:9)

对我来说,WinForms与WPF的决定很简单 - 如果普通人会使用它,那么用户界面可以区分赢家和输家。

这绝对是一个陡峭的学习曲线。但我从来没有完成一个漂亮的WPF应用程序,并说“伙计,我应该使用WinForms”。

我会说投资于尽可能为您的客户提供更好的用户界面,如果是这样的话,那么WPF是的。

答案 1 :(得分:8)

WPF有一个非常大的学习曲线。它很可能要求你重新编写比你想象的更多的UI。此外,许多使WPF更好用的功能尚未实现或包含在WPF中。 Unlike routeNpingme,我编写了漂亮的WPF应用程序,并说:“多么浪费时间,我应该使用Windows Forms并在70%的时间内完成。”

修改 此外,除非微软想出一种让WPF更容易学习的方法,否则我认为它根本不会影响群众。 WPF可以做一些非常酷的事情,但是一点点努力让它易于理解而不是把东西扔到墙上会有很长的路要走。毫不犹豫地看到微软放弃WPF以便在不久的将来更容易使用。因此,不要仅仅为了更改它而更改Windows窗体应用程序。

答案 2 :(得分:5)

优点:

  • 非常简单的数据绑定(大部分时间)
  • 外观和感觉的轻松自定义

缺点:

  • 非常陡峭的学习曲线
  • 一些明显的错误或问题。与.NET 1.0 Windows Forms相似
  • 很少或根本没有工具支持

在我看来,WPF肯定会在某些时候取代Windows Forms。但是,现在工具是保持它的主要因素。我不同意Dunk的说法,微软会把它放弃别的东西。改变它是的,但我认为它就在这里。

您是否应该立即更改应用程序以使用WPF?没有。随意学习WPF,但如果您的应用程序当前正常工作,那么WPF将不会给您任何额外的帮助。它只是使Windows Forms中的可能性变得更加容易。

答案 3 :(得分:3)

WPF很棒。特别适合使用自定义扩展TreeView等控件。您可以在TreeControl中将字符串添加为项目。您还可以添加包含图像的小面板和各种字体和颜色的文本。或者您可以添加按钮或任何您喜欢的按钮。它有一个完全通用的可组合系统。 ListBox,ComboBox,Button等也是如此。所有内容或子项都可以像字符串一样简单,也可以像带有缩放按钮的多页文档查看器那样复杂(如果需要)。

但要找出的唯一方法是尝试移植您的某个表单。从现有应用程序中打开WPF窗口应该不会太难。我开始使用WPF,制作托管在C ++ Win32应用程序中的新GUI面板。最终很明显WPF是我们切换它并制作外壳WPF的方式,一些古老的对话框仍然由旧的C ++代码实现,我们无法重写它们(可能正是什么将在Visual Studio 2010中实现。)

答案 4 :(得分:1)

移植是一个艰难的决定。所以只是一些想法可以帮助你做出决定。

WinForms在您遵守规则并按原样绘制时保持正常。但是,即使在某些控件上重新绘制边框,也可能需要复杂而精确的工作和技能,正如您从树自定义中已经知道的那样。在WPF中可以以非常优雅的方式完成相同的任务。

此外,WPF中的数据绑定为我节省了大量时间。从长远来看,您最终会考虑在没有特殊情况编码的情况下在WinForms中无法远程实现的数据绑定方案。

我甚至不认为WinForms用于新开发 - 没有任何借口可以定制成本。

答案 5 :(得分:1)

我已经开始在我的WinForms应用程序中引入WPF元素,到目前为止已经取得了很大的成功。

应用程序的主要组件是网格控件,我还没有发现WPF的文本呈现足够清晰,可以显示重要的文本数据表。

但该应用程序有几个额外的面板,其中大部分是使用WPF实现的。所以,我想通过ElementHost控件来实现WinForms和WPF的混合。

我发现WPF的灵活性允许更具吸引力和更实用的用户界面,我的用户似乎对它非常满意。就我而言,在政治上更容易一次引入WPF一个小组。

答案 6 :(得分:0)

WPF对我的主要价值在于绑定,而不是在更酷的UI中。我见过的最糟糕的WPF就是当人们使用WPF时,因为它更新,并将所有工作放在代码隐藏中,包括不使用绑定。你得到的是WinForms数据管理。因此,当你做WPF时,一定要使用精彩的绑定。

我会将OP的业务逻辑移植到业务层,以便于维护和转换。除非需要新的Xaml功能,否则我根本不会将WinForms移植到Xaml,最好不要在移植功能之后。