WPF vs Winforms的.Net新手
我很新的微软.Net框架我的问题是: 学习Winforms或WPF更容易和更快?
更容易和更快? 几乎可以肯定的是winforms。
WPF更容易量化 – 它更复杂但更强大,但说实话,我已经失去了未来的轨道…它被杀了吗? 谁知道……尽pipe如此,Xaml肯定有移动生活(WP7)。
国际海事组织虽然,你的时间最好花在学习networking用户界面 – 一些jQuery或HTML5。
两者都不是,容易是非常主观的,取决于你的背景。 首先,我想在WPF和WinForms中展示一个应用程序的例子:
- input的文本框
- 一个button来做一些input的“处理”
- 将显示结果的标签
的WinForms
窗口可以看起来像这样:
这个代码对于初学者来说是相当简单和容易的:
private Button _myButton; private Label _resultLabel; private TextBox _inputTextBox; public Form1() { InitializeComponent(); _myButton = new Button { Text = @"Process data", Top = 100 }; _inputTextBox = new TextBox(); _resultLabel = new Label { Text = "", Top = 200 }; Controls.Add(_myButton); Controls.Add(_inputTextBox); Controls.Add(_resultLabel); _myButton.Click += Process_Click; } void Process_Click(object sender, EventArgs e) { _resultLabel.Text = string.Format("Your data is: {0}", _inputTextBox.Text); }
到目前为止,我们还没有碰到任何devise师。
WPF
如果我们将完全相同的代码复制并粘贴到一个新的WPF应用程序中,那么我们必须改变其中的一些:
- 我们如何将控件添加到界面
- 我们如何改变标签中的文字
- 我们如何从顶部(边缘)
然而,这些只是两者之间的不同之处,在这一方面既不困难也不容易。 所以这就是WPF中窗口的样子:
代码几乎相同:
private Button _myButton; private Label _resultLabel; private TextBox _inputTextBox; public MainWindow() { InitializeComponent(); _myButton = new Button { Content = @"Process data", Margin = new Thickness(0, 100, 0, 0) }; _myButton.Click += Process_Click; _inputTextBox = new TextBox(); _resultLabel = new Label { Content = "", Margin = new Thickness(0, 100, 0, 0) }; var panel = new StackPanel(); panel.Children.Add(_inputTextBox); panel.Children.Add(_myButton); panel.Children.Add(_resultLabel); Content = panel; } void Process_Click(object sender, EventArgs e) { _resultLabel.Content = string.Format("Your data is: {0}", _inputTextBox.Text); }
到目前为止,WPF和WinForms似乎都相当难学。 但是,这只是代码隐藏的方法,当我们来到devise师那里,有一个巨大的差异。
的WinForms
当您开发WinForms应用程序时,将控件拖放到表面上并使用属性窗口来更改窗口的属性。 这看起来像这样:
所以你可以拖放你的控件,你可以改变每个控件的属性,并将它们捕捉到你想要的位置,很简单吧?
WPF
那么WPF呢? 在那里做同样的事更难吗? 我想不是:
这里的主要区别在于你在底部有一个额外的“窗口”。 该窗口是您的devise的XML(XAML)视图。 这是WinForms和WPF的不同之处。 但正如你可以避免在WinForms中编写devise代码一样,你也可以避免在WPF中作为一个新手。
至于新手 ,当我们对select的技术进行更深入的研究时,我认为学习这个或那个技术并不困难也不容易,当然,它变得更加复杂。 但是无论你select哪一种,这种方式都很容易或者很难。
那么你什么时候select这个或那个?
您selectWinForms是因为:
- 它已经存在了很长一段时间,你有一个很大的控制供应,你可以使用。
- WinForms 有很多很好的资源可以学习和获取新的控件。
你selectWPF是因为:
- 您可以制作更丰富的用户界面,现在只需要关注用户体验。
- 你想完全控制你的控件的devise。
- 你想要丰富的,数据驱动的应用程序。
- 你想要硬件加速的UI。
怎么样的数据绑定,devise模式和所有这一切?
您不需要了解任何关于devise模式的知识,也不需要知道所有的东西都可以用来制作可用的应用程序,特别是不作为新手。 随着时间的推移,您将不得不更多地了解您select的技术。 人们往往会说,你需要知道MVVM使用WPF,这是不正确的。 因为你不需要知道MVP模式来创buildWinForms应用程序。
这两种技术都可以处理丰富的数据驱动控制。 你有两个网格视图等。 WinForms有一些相当不错的“拖放”function,用于数据操作和列表,WPF有非常好的数据绑定。
如果我不想select一个或另一个呢?
美是你不必! 您可以在WPF中托pipeWinForms控件,并且可以在WinForms中托pipeWPF控件。 这意味着如果您正在开发一个WinForms应用程序,并且想要利用WPF,那么您可以!
那哪个更容易?
两者都不! 作为一个新手,两者在表面上看起来可能非常相似,尽pipe当你更深入的时候它们是完全不同的。
他们是相似的,但如此不同; 事情是,当你开始时,你有其他事情要考虑,而不是路由模型如何工作,以及如何适应MVVM。
XAML死了吗?
不,XAML没死。 WP7使用也使用XAML的Silverlight。 即使将来可以用HTML5进行很多开发,但我怀疑XAML是否会“死亡”。 人们问,当WPF被释放时,WinForms是否会死亡,而没有。
Windows Forms肯定比WPF更成熟的技术,我会说。 有足够的文件。 我认为,WinForms与WPF的东西真的很荒谬,因为我认为它们各有其用处。
Windows窗体很好,你可以用它做出非常有吸引力的用户界面。
但我也认为,WinForms非常适合用WPF开发Windows外观应用程序 ,您正在寻找更多的多媒体/丰富的体验。
我已经用WinForms开发了多年,现在还没有采用WPF,因为我仍然不需要WPF。 我可以用WinForms实现我想要的一切。 事实上,我已经开发了一个基于WinForms的整个框架,以提供丰富的Windows外观体验,能够轻松实现上述结果。
但是,如果我需要创造丰富的多媒体体验,我将切换到WPF。 但是我正在开发function性应用程序,比如拍摄,问题跟踪软件,框架等等。
事实上, 这里是我用WinForms所做的另一个例子 。 我觉得我真的可以将WinForms推向极限,并且有能力更进一步。 我喜欢它的发展。
我认为,当人们试图将WinFormsdevise为WPF的时候,我不确定他们真的得到了什么好的devise 。 它更多的花式button和animation,漂亮的丝带控制。
我不是在WinForm或WPF的狗。 我认为这两个都是很棒的技术,但我绝对认为WPF更加适应丰富的多媒体风格体验。
此外,我不认为任何人都更容易学习。 WPF使用XAML深入了解不同的事件风格模型,WinForms可以让你自己做更多的事情。 我想到的WinForms与WPF在C + + / C#的angular度来看,但用户界面的意义。 WPF看起来像一个更抽象的更高层次的devise风格,这使devise吸引人的UI变得更容易。 相反,WinForms,你必须通过编程来完成你的devise。
总之(我跳了起来),我会尝试每一个样本项目,并select你最喜欢的,什么满足你的具体需求。 我不相信这只是因为你有WinForms的技能,你会“维护代码”。 今天在WinForms上还有很多事情正在开发中。
WinForms非常容易学习(因为学到的东西很less)。 开发RAD应用程序将非常简单。 另一方面,WPF将需要更多的努力,而您的应用程序将更易于维护(借助MVVM范例)。
Windows窗体,会更容易学习。
查看这个链接的WPF与Winforms的小写。
我喜欢这样说
Winforms更容易,因为它的devise方式与您当前的智能和经验水平devise相同,因为您有足够的时间来实现它。 因此,你可以把它拿起来,并开始以你想象的方式使用它。 我经常在开发winforms的时候猜测,90%的时间是这样工作的。
另一方面,WPF已经超越了架构devise,并且一直在努力让自己变得聪明,使得中等复杂度的事情变得一团糟(猜测UserControl和CustomControl之间的区别是什么,以及何时需要使用它们)。 超级简单的东西作为拖放编辑器的作品,以吸引用户和大量的奇怪的事情,如数据绑定您的应用程序模板的dynamic与Web服务需要2线只是为了炫耀。 你做的任何新事情都需要你在文档/例子中查找。
使用winforms来完成任务,如果你需要使用Direct2d的性能,Microsoft的Windows API代码包1.1中有一个托pipe的包装。
Winforms基本上更容易学习,特别是如果你来自VB6
WPF在许多方面function更强大,但是它有许多新的概念(例如DataTemplate),可能需要付出很大的努力,特别是对于初学者。
当你学习WPF时,你通常也学习MVVM模式。 这很好,但起初对我来说至less不容易。
总之,WPF有比Winform更多的新概念。 你必须学习新的东西,改变你的思维方式。 这需要时间,但我认为这是值得的,因为您可以将这些概念用于其他目的。 举例来说,我使用WPF学到的东西对于Android编程非常有用。
虽然winforms比其他人更容易学习,但WPF现在是.NET企业应用程序的首选前端框架。 如果您拥有Winform技能,则可以维护应用程序,WPF技能将帮助您进入新产品开发阶段。
在大多数情况下,窗体就足够了。 你几乎可以用Windows窗体来实现任何混淆的用户界面需求。 你可以从wpf中得到同样的结果。
但是wpf支持一种称为mvvm的模式,它将UI与模型分开,并且基于UI的交互/validation来自两者。 这使得应用程序的各个方面都可以独立testing。 例如,您可以采用validation逻辑,编写各种testing用例,并独立testing,而不会影响UI开发或模型开发。
但是这在技术上是mvvm提供给你的吗? Wpf是利用硬件加速graphics和设备独立像素化的技术。 意味着你的forms(只要它不resize)将在显示器上看起来相同的低DPI,或更高的DPI。 (DPI是像素密度的量度)。
赶上这篇文章:
http://www.codeproject.com/Articles/140611/WPF-Tutorial-Beginning