从Windows窗体转换为WPF

ser*_*0ne 112 c# windows wpf windows-forms-designer winforms

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

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

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

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

Rac*_*hel 174

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

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

换一种方式来看,使用WPF,您的应用程序由您创建的对象组成,并使用模板和其他UI对象告诉WPF如何绘制应用程序组件.

这与WinForms相反,您可以使用UI对象构建应用程序,然后为其提供所需的数据.

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

而且就个人而言,我更喜欢手动输入我的所有XAML,因为它更快,并且不会像拖放WPF设计器那样混乱,尽管我偶尔使用Designer来预览我的UI看起来喜欢.

所以,为了回答你的问题,如果有其他WPF设计师适合WinForms开发人员,我建议不要寻找另一个设计师,而是要学习如何使用WPF.使用WPF就像它的WinForms意味着你错过了很多让它如此出色的东西:)

  • 完全同意@Rachel.进入WPF的最重要的实现是了解[UI不是数据](http://stackoverflow.com/questions/14381402/wpf-programming-methodology/14382137#14382137)并采取相应的行动. (14认同)
  • @HighCore看一下http://stackoverflow.com/questions/982978/mvvm-for-winforms,你必须承认Winforms只是一个View/UI组件,业务对象可以绑定到用户控件.好的:WPF更适合MVVM,但Winforms也可以在这样的设计模式中工作.正如Rachel所说:"这与WinForms相反,你可以用UI对象构建应用程序,然后为它们提供所需的数据." 尽管如此,这是不正确的.我总是以至少数据和视图的方式思考.数据和Winforms/WPF/HTML无论如何. (3认同)
  • @YoupTube你是对的,Winforms确实支持数据绑定,并且可以为默认绑定系统也不起作用的情况创建自己的自定义绑定.我写这个答案和我的博客文章时考虑了初学者,通常初学者会考虑UI组件,而不是数据对象.此外,WinForms中的绑定并不总是存在于它现在所处的状态,因此许多使用WinForms成长的开发人员,或习惯于不使用绑定的其他技术的人,在切换时通常不会识别这个关键区别到一个绑定的架构.:) (3认同)
  • @Rachel - 只是扮演魔鬼的拥护者:从UI开始(窗口中出现按钮,文本框等)有助于将应用程序集中在*你想做什么.其余的只是*如何*你想要的实现细节. (2认同)
  • 它至少在数据输入/修改级别支持数据绑定.那些99.9999999%的开发人员也会在WPF中搞砸我怀疑.但让我们完成这个讨论.WPF绝对更强大/适合MVVM和关注点分离,但我认为你和Rachel推动Winforms处于负面角落.特别是当你继续使用你使用的词语时...... (2认同)
  • @AshrafAbusada我想这取决于你的WinForms应用程序是如何构建的,以及你是否想要使用MVVM.我将看到的两个最大的挑战是WinForms应用程序,这些应用程序的构建方式不会使UI层更容易,而且对象模型上缺少"INotifyPropertyChanged".根据WinForms应用程序中模型层的复杂性,重写它们实际上可能更快. (2认同)

DHN*_*DHN 9

虽然有些人不同意,但我也建议不要使用VS设计师.至少不要创建一个接口.如果你可能希望得到您的实现的第一印象,而无需启动应用程序,这是一个很好的观众至少长达一样,没有复杂的事物StylesTemplates使用.但是,恕我直言,它的拖放结果应该仅用作原型,因此在不再需要之后被丢弃.

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

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

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

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

回到你的问题,恕我直言,我认为很多人都同意,给自己一本好书,例如WPF Unleashed,如果你想了解更多关于细节的话,WPF Pro.有很多不同的功能Winforms.你不会通过使用任何设计师来了解它们.我认为这是最好的方法.

还请考虑有很多框架和库(例如MVVM light,WPFToolkit),它们已经解决了一些常见问题.因此没有必要重新发明轮子.


pet*_*erG 9

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

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

该视频涵盖了类似的内容.

我仍然更喜欢VS2010设计师的平衡 - 当拖放到TabItems**(我当前的项目使用很多)时,VS2013似乎有点儿麻烦 - 但是VS2013文档大纲视图也允许你在该视图中移动东西,这可能是一个真正的加分.

但实际上,为了充分利用WPF和xaml,您需要在设计器视图和xaml视图中合理流畅地进行切换,并在它们之间进行切换.如果你回避设计师,你会错过一些可以帮助你的东西.

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


mle*_*may 7

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

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

  • 我认为建议来自Forms的人并启动WPF而不使用设计师是一个非常糟糕的主意.理解XAML的最快方法是使用拖放然后观察代码. (12认同)
  • 当你在WPF中拖放时,我经常会看到你有很多-1200的余量以及那些完全没有意义的东西......我总是手工制作它确实更好 (3认同)

use*_*710 7

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

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

它使UI开发变得有趣.特别是一旦你发现它喜欢与Asyc过程一起玩的话.它确实消除了Winforms引起的许多麻烦.