从Windows窗体转换为WPF

时间:2013-03-28 12:05:19

标签: c# wpf windows winforms windows-forms-designer

很长一段时间以来,我一直坚持使用Windows Forms开发(从VB6开始,一直到C#.NET 4.5),而且我已经达到了Windows Forms可以做的极限,两者都使用纯.NET,以及Native Code的特殊效果。

我知道WPF是未来(目前),Windows Forms正在放慢成为一种弃用的技术。

我曾尝试学习WPF和XAML,但是我遇到了WPF的新设计师......与Windows Forms设计师相比,它似乎很难使用...当然......这只是一个学习曲线,在某些时候我打算继续学习WPF。

与此同时,我想知道.NET的WPF设计器是否有更适合Windows Forms开发人员的替代方案?

5 个答案:

答案 0 :(得分:172)

我喜欢关于WPF的初学者文章的博客,有一些特别可以帮助你解决:

总而言之,Winforms和WPF之间的最大区别在于,在WPF中,您的数据层(DataContext)是您的应用程序,而在Winforms中,您的UI层是您的应用程序。

以另一种方式来看,使用WPF,您的应用程序包含您创建的对象,并使用模板和其他UI对象告诉WPF如何绘制应用程序组件。

这与WinForms相反,你可以用UI对象构建应用程序,然后为它们提供所需的数据。

因此,设计人员实际上并没有那么多使用,因为您的应用程序组件是按代码设计的,设计人员只需绘制一个反映您的数据类的用户友好界面(通常为ModelsViewModels

就个人而言,我更喜欢手动输入我的所有XAML,因为它更快,并没有像拖放WPF设计师那样混乱,尽管我偶尔使用Designer来预览我的用户界面看起来像。

因此,在回答您关于是否有其他适合WinForms开发人员的WPF设计人员的问题时,我建议不要寻找其他设计师,而是要学习如何使用WPF。使用WPF就像它的WinForms意味着你错过了很多让它如此伟大的东西:)

答案 1 :(得分:9)

嗯,虽然有些人不同意,但我也建议不要使用VS设计师。至少不要创建一个接口。如果您希望在不启动应用程序的情况下获得实施的第一印象,那么至少在使用StylesTemplates之类的复杂内容时,这是一个很好的查看器。但是,恕我直言,它的拖放结果只能用作原型,因此在不再需要之后就被丢弃。

以下是一些对我不使用它很重要的原因。

  1. VS设计师正在使用修复边距和对齐(如果您使用布局控件,通常不需要),这意味着如果需求发生变化,您必须触摸许多控件。如果你深入研究XAML和WPF技术,你可以创建一个可以轻松修改的应用程序,关于外观。

  2. 由于设计人员正在生成xaml,因此组合不是最佳的,并且UI可能表现不佳。我没有测量它,这只是一种感觉。

  3. 一个更好的选择是 MS Blend ,虽然开始是一切,但很容易。它的拖放结果比VS设计师的结果要好得多 但它是一个非常强大的工具,它可以帮助您使用非常强大的元素来创建最先进的UI。我建议至少参观一个简短的研讨会,以了解其机会。

    回到你的问题,恕我直言,我想很多人都同意,给自己一本好书,例如 WPF Unleashed 以及稍后,如果您想了解有关详细信息的更多信息,请 WPF Pro 。有许多与Winforms不同的功能。你不会通过使用任何设计师来了解它们。我认为这是最好的方法。

    还请考虑有许多框架和库(例如MVVM lightWPFToolkit),它们已经解决了一些常见问题。所以没有必要重新发明轮子。

答案 2 :(得分:9)

我知道这是一个古老的问题,但为了其他任何人的利益,我想我应该稍微纠正一下 - 阅读其他一些答案,我觉得有些'不要使用设计师的情绪来自于没有正确使用它。 This tutorial非常适合让你前往并回答其他帖子中的一些批评。

例如,通过右键单击并选择“重置布局”,您可以从放置控件时默认的类似Winforms的基于边距的布局切换到更多WPF-ish样式

This video涵盖类似的理由。

我仍然更喜欢VS2010设计师的平衡 - 当拖放到TabItems **(我当前的项目使用很多)时,VS2013似乎有点儿错误 - 但是VS2013文档大纲视图让你可以移动它这个观点也是如此,这可能是一个真正的好处。

但是,实际上,要充分利用WPF和xaml,您需要在设计器视图和xaml视图以及它们之间切换时合理流畅;如果你回避设计师,你会错过一些可以帮助你的东西。

**编辑 - 虽然在VS 2013的Update 3和VS14的预览中似乎已经有所改进,但到目前为止我仍然会有奇怪的行为。

答案 3 :(得分:7)

首先,在Visual Studio deisgner中的WPF(XAML)中,您应该始终使用xaml代码来构建UI,而不是拖放您的控件!您需要保持代码清洁。您可以使用Expression Blend来帮助您,它通过拖放更加面向图形,但它不是免费的。

这不是一个很大的学习曲线,但我认为你应该学习如何手工制作你的xaml而不是寻找替代方案。

答案 4 :(得分:7)

我和你一样经历过这个过程。之后我在公司WPF教过每个人。我学到了几个重要的经验,我认识的每个人都使用WPF。

  1. 如果你在后面的代码中使用UI控件,那么你做错了。您完全没有必要在后面的代码中处理UI控件。
  2. 您不需要可视化开发人员点击它。只处理XAML,你的工作效率更高。 使用复制/粘贴。不要相信你的打字功能。它会省去很多麻烦。
  3. 将XAML视为一个躲过数据的窗口。在你背后的代码中你正在改变数据。在XAML中,您将定义UI将如何解释数据。
  4. 转换器非常棒。一旦你获得了大量的转换器,你的生产力就会高涨。他们将接管隐藏或调整大量控制事件处理程序的角色,或者关于UI的内容,
  5. 它使UI开发变得有趣。特别是一旦你发现它喜欢与Asyc过程一起玩的话。它确实消除了由Winforms引起的许多麻烦。