WPF与WinForms-Delphi程序员的观点?


38

我已经阅读了WPF与WinForms上的大多数主要线程,而我发现自己陷入了不幸的矛盾之中,当您在尝试使用过的和真正的先前技术(Winforms)以及它的后继技术(WPF)之间做出选择时,就会陷入这种矛盾中。

我是多年的资深Delphi程序员,最终终于跳到了C#。我的其他Delphi程序员同伴将了解到,我很高兴知道Delphi闻名的Anders Hejlsberg是C#的架构师。我对Delphi的VCL定制组件非常着迷,尤其是那些涉及制作多步向导和充当子组件容器的组件的组件。

在这种背景下,我希望从Delphi转到C#的那些人可以帮助我完成WinForms vs. WPF决策,以编写初始应用程序。请注意,当我进行编码时,我非常急躁,诸如成熟的自动完成功能和适当的调试器支持之类的东西可能对我来说成败一个项目,包括能够找到有关API功能和调用的随时可用信息,甚至更多的错误解决方法。 。

2009年初日期范围内的SO线程和注释使我非常担心WPF,因为它可能会破坏我的C#UI开发代码。另一方面,花费大量时间来学习即使没有被放弃也即将被替换的API技术(WinForms),同样令人不安,我确实在WPF诱人中发现了GPU支持。

因此,我的矛盾情绪。由于我还没有学过任何一种技术,所以我有一个难得的机会重新开始,而且不必面对巨大的“无学习”曲线,当WinForms程序员转向WPF时,我已经看到人们在各个线程中提到了这一点。另一方面,如果对像我这样的耐心的RAD开发人员来说,使用WPF太令人沮丧或产生其他严重的负面影响,那么我将坚持使用WinForms,直到WPF达到相同的支持水平和易用性。为了给您一个具体的例子说明我作为程序员的心理,我使用了VB,随后又使用了Delphi,以完全避免使用MFC进行编码的真正痛苦,MFC是许多开发人员在开发早期Windows应用程序时都会遇到的Windows UI库。我从未后悔避免使用MFC。

知道Anders Hejlsberg是否参与过WPF和/或WinForms的体系结构,以及这两个代码库中体现的创意视野和易用性方面是否存在差异,也令人感到欣慰。最后,再次让Delphi程序员知道使用WPF而不是WinForms时需要多少“ IDE schock”,尤其是在调试器支持方面。2011年更新的任何就业市场评论也将不胜感激。


2
WPF是否因性能不佳而名声不佳?
David Heffernan'3

9
@David:确实确实有这样的声誉,但是像往常一样,现实并不像说唱那么糟糕。Visual Studio 2010的GUI是用WPF重写的,与VS 2008相比,大多数计算机上的速度似乎没有明显下降。特别是对于Delphi转换。但是我有点犹豫,将其发布为答案,以免它被淘汰。每个人似乎都反对它,因为它是“旧的”技术,好像实际上意味着什么。
科迪(Cody Gray)

@Cody。明白了 我从答复和评论中获得了一些很棒的信息,但是我希望获得有关WPF的更多直接信息,它是对WinForms的调试器支持以及一些工作市场的信息。我仍希望得到这些主题区域中提出的查询的答案。
罗伯特·奥施勒

1
@CodyGray:你一定是在开玩笑。VS2010比VS2008慢一百倍,WPF也是。您的印象可能是由于通常的程序员的偏见造成的:您仅查看大多数普通用户所没有的最新高端机器。
Timwi'8

Answers:


20

如果您有Delphi的背景,您将对WinForms感到失望。您将尝试在VCL中做容易的事情,只是发现它们非常困难,甚至是不可能的。WPF的限制将大大减少。

例如,这只是我们遇到的一些WinForms限制:

  • WinForms与TAction相比没有什么,因此,如果您习惯于使用动作进行编码,则在菜单项与工具栏按钮以及右键菜单之间共享相同的文本和图标,集中启用逻辑并更新启用状态在OnUpdate的后台运行...您会讨厌WinForms,在这种情况下,您必须采取所有困难且容易出错的方法。
  • WinForms的旧(.NET 1.0老式)MainMenu不支持菜单项旁边的图像,而新的(.NET 2.0中引入的)MenuStrip 充满了 Microsoft 拒绝修复的错误(因为这些错误可能破坏向后兼容性)。
  • 与VCL同类控件相比,许多控件(例如TreeView)的功能严重不足(痛苦极慢,没有所有者绘制,缺少许多自定义选项,等等)。
  • 与您在Delphi中惯用的充满活力的第三方控件开发人员社区不一样。那里有质量控制库,但是您需要付费才能使用-像VirtualTreeView这样的免费产品就没有WinForms了。

在某些方面,WPF比WinForms更为简单,但它的可扩展性更大。

  • 您想要TAction之类的东西吗?WPF具有ICommand,它与您以前使用的一样丰富(但请确保您阅读了Josh Smith的MVVM文章 -通常您必须在状态更改时手动启用/禁用命令,但是他的版本会自动触发启用代码在后台,就像您习惯使用OnUpdate)一样。
  • 您想要菜单上的图像吗?这是内置的(而且没有WinForms那样的错误)。
  • WinForms在一些重要的控件上省略了所有者绘图,但是如果您使用的是WPF,则不需要所有者绘图-如果您希望TreeView节点的黑色文本后跟一个带括号的蓝色数字,您只需将其放在您的DataTemplate中即可使用,不需要丑陋的所有者绘制代码。
  • 您想要第三方控件吗?在许多情况下,您不需要它们,因为您可以用WinForms扩展现有内容,是的,VCL开发人员只能梦dream以求。

WPF的学习曲线非常陡峭,但是如果您拿起一本好书(例如“ WPF 4 Unleashed ”),它将帮助您克服最糟糕的情况-并且,您将很高兴使用一个框架,不会像WinForms那样阻碍您。


1
感谢您对Delphi的直接评论。关于VS 2010对WPF的VS 2010调试器支持的任何职位市场评论和任何信息,特别是跟踪/检查问题?我将检查您链接的书。
罗伯特·奥施勒

1
不了解就业市场。至于调试器,如果窗口的构造函数抛出异常,会感到沮丧,因为调试器不愿给您堆栈跟踪信息-但您要做的就是在调试器的异常详细信息对话框中深入研究InnerException的两个级别。如果绑定不起作用,请在调试器下运行,然后在“输出”窗口中查看以查看绑定错误。除此之外,我不确定您有什么问题。根据我的经验,WPF可以进行OK调试,而MVVM可以使您对单元界面逻辑进行单元测试,而不是WinForms。
乔·怀特

6
学习曲线非常陡峭。您在WPF中没有太多程序;您问有关如何说服WPF做您想做的事情的问题。
伊恩·博伊德

实际上,一些最大的障碍是关于学习使用正确区分职责的框架来工作,而不是仅仅让所有内容盲目地从TKitchenSink中获取。
乔·怀特

1
我可以使用Delphi表单,但保留C#语言吗?请?
罗伯特·哈维

13

人们通常会说他们在WPF方面没有很好的经验,我通常会感到非常惊讶。我是一位从C ++ / MFC切换到C#/ WinForms到C#/ WPF的开发人员。从WinForms到WPF的过渡并不容易,因为学习XAML并不是一件容易的事,但是一旦掌握了它,它就是一项了不起的技术。我,一个,不能回到WinForms。WPF太棒了。

令我困扰的另一件事是人们通常如何将WPF与仅UI关联。我认为在UI设计方面,它确实比WinForms好100倍,但是您还有很多其他原因会喜欢使用WPF:

  1. UI,当然。
  2. 绑定。只是简单的魔术。UI之后最强大的功能。LOB应用程序从中受益最大。
  3. 命令。
  4. 关注点分离。设计师从事设计工作,程序员编程。
  5. 附加属性。您可以在不使用源代码的情况下扩展第三方控件的功能(尽管这很可能是第一点的一部分)。
  6. 轻松过渡到Silverlight(网络和WP7)

关于最后一点,您可能不同意我的看法,这是您学习WPF的原因,但是如果您问我,那是最大的问题之一。学习WPF后,可以轻松过渡到Silverlight。Silverlight越来越大,它也是一项了不起的技术。

最大的原因是,这就是未来。可以将它与Silverlight合并,但是技能将保持不变。

因此,我强烈建议您采用WPF方式。


1
我不是说我不同意,而是所有这些原因都与UI相关(尽管您说的另一件事困扰我的是人们通常如何将WPF与仅UI相关联
Ed S.

1
+1是因为我同意您的所有观点。我选择了要学习WPF还是Winforms,我选择了WPF,从不后悔。@Ed:除了第一个之外,我认为这些都与UI无关。
雷切尔

1
@Rachel:真的吗?当属性值更改时,绑定用于更新UI。显然,#4中的关注点分离仅在开发UI时适用。#5与第三方控制有关。没有用户界面,没有控件。#6再次涉及到转换为Silverlight UI。我想念什么吗?
Ed S.

3
我或多或少地采取了相反的方式:WPF-> WinForms-> C ++ / MFC。是的,我是反叛者;我向上游游泳。我只是看不到WPF带给UI的任何吸引力。一堆糟糕的,非本地化的软件不是我的“进步”想法。除此之外,我不确定这么多(包括该答案)与WPF相关联的设计模式在WPF方面是否是专有的。您可以在任何语言或GUI框架中使用设计模式。区别仅仅是因为如果您不被强迫,人们不会这么做吗?轻松过渡到Silverlight是唯一令人信服的原因。
科迪(Cody Gray)

5
我使用WPF应用程序的第一个任务是:放下工具栏,使其高14 dlus。无法完成。第二项任务:设置表单字体以匹配用户的字体和大小。无法完成 第三步:将项目添加到没有绑定的列表视图中无法完成, 我退出。
伊恩·博伊德

5

显然,WPF是未来的思考方式。掌握它很困难,但是该平台具有很好的架构和灵活性。

几行建议:

  • 轻松上手:不要尝试仅使用MVVM或精美的动画来实现您的第一个项目。从窗口,按钮和列表开始。
  • 利用DataBinding。
  • 购买Adam Nathan 所著的《WPF Unleashed》

+1。实用答案。尽量不要仅使用MVVM或精美的动画来实现您的第一个项目
Karthik Sreenivasan'Feb

4

首先,我应该主要是asp.net开发人员,尽管我以前使用过很多winforms。一周左右(40多个小时)后,切换到WPF并没有达到您设定的(imo)水平,大多数情况还是第二天。

无论如何,至少在本书出版商看来,我相信Anders Hejlsberg是WPF背后的建筑师之一。

作为WPF背后的建筑师之一,克里斯·安德森(Chris Anderson)熟练地不仅解释了“方法”,而且解释了“原因”。对于任何想了解WPF的设计原理和最佳实践的人来说,这本书都是极好的资源。” – Microsoft公司技术研究员Anders Hejlsberg

http://www.amazon.com/Essential-Windows-Presentation-Foundation-WPF/dp/0321374479


11
“作为WPF背后的建筑师之一,克里斯·安德森巧妙地解释了……”表明克里斯·安德森是WPF背后的建筑师之一。根据引用的文字,Anders Hejlsberg只是Microsoft Corporation的“技术研究员”,因此不能证明他参与WPF。
Andreas Rejbrand'3

嗯,这可能是正确的,但这确实表明他尊重它!

2
或者至少他尊重克里斯。
布鲁斯·麦吉

1
或者至少是公关部赢得了声誉的人发表评论。
quick_now 2011年

@Andreas; 开个玩笑:只有 “技术专家”。不想减少克里斯·安德森(Chris Anderson)-他是一个保持低调的好人(msdn.microsoft.com/en-us/ff395959在那儿,但是simplegeek.com很久没有更新了)。Anders Hejlsberg参与了许多.NET(技术研究员具有广泛的影响),毕竟他是框架专家(VCL,WCF等-请参见simple-talk.com/content/article.aspx?article=673Microsoft .com / presspass / exec / techfellow / Hejlsberg / default.mspx),而且技术研究员很少...
Jeroen Wiert Pluimers 2011年

2

Winforms与Delphi开发几乎相同。当然,这是有原因的。正如Delphi / Object Pascal对象模型严重影响C#一样,表单系统也影响Winforms。

WPF似乎是事情发展的方向。有人说,(华丽的!)VS2010 UI是基于WPF的,这与以前基于Winforms建立的版本不同。

如果要保持舒适,请使用winforms。如果您想了解最新的最新信息,请沉浸在WPF中。


3
WinForms是Delphi扩展的,与Delphi相比,它实际上非常令人沮丧。它比Delphi更像是VB-3,而IME的果糖水平相似。

2

我不是Delphi程序员,但是是的,我同时从事WinForm(繁重)和WPF(中等程度)的工作。我在某种程度上同意您的挫败感,因为有人要从WinForm切换到WPF,因为我自己处于那种情况,但是直到我习惯了。了解并了解WPF与WinForm相比多么精彩和灵活。它具有繁重的学习曲线,至少对于那些有Delphi背景而不是Winform的人而言。对于您来说,向WPF而不是WinForm绝对值得,而且值得花时间。

您可能需要查看以下链接以开头:


1

我已经完成了一些Windows窗体工作(大多数是在Pocket PC上),以及其他一些使用相同原理的非.NET环境。大约三年前我搬到WPF时,头几个月我一直在发誓。最终,它只是被“单击”,而我没有回头-实际上,如果我的下一个项目要求我回到Windows Forms,我会感到很沮丧。

Windows窗体的上一次更新是在2005年(VS 2005)。它仍然存在,但不再被Microsoft改进。WPF是桌面应用程序的新手,因此,如果您要使用MS工具迁移到.NET平台,那我肯定是安全的选择。有人将Silverlight用作桌面解决方案,但是当我将其视为一种可能性时,我发现它有太多限制(在Web上下文中可能有意义,但在桌面上则没有太多限制)。

底线:学习曲线很陡,我仍在学习。但这一切都值得。其乐无穷。


1

如果要从头开始编写新的应用程序,则使用WinForms是一个错误。从投资的角度来看,它基本上已经死了。Microsoft将保留它很长一段时间,但是您将不会获得任何新功能或新支持等。WPF是MS平台上未来桌面应用程序的明确方向。

从职业角度来看,了解WPF与WinForms也要好得多。由于上述相同原因。此外,您还将学习Silverlight。这两个平台之间存在大量重叠。

最后,WPF更有趣。而且功能更强大。

学习曲线更加陡峭,我给你。但这最终更有意义。


0

应该提到的另外一个考虑因素是,没有计划在mono中支持WPF。我知道您对(单)跨平台支持没有任何兴趣,但是将来(如果您使用Winforms)可能会有这种机会。大概会以单声道(或类似形式)支持WPF。

编辑:正如我提供的链接所指出的那样,并且Gulshan的评论突出了,Moonlight是由Mono团队领导的开源工作,旨在提供跨平台Silverlight支持


但是Moonlight正在积极发展中。
Gulshan'3

-1

当我听到有关WPF的消息时,我感到非常兴奋,这个想法听起来很棒,而且我所看到的一切都非常美好。但是,当我在Visual Studio 2008中使用它(公认的是一个beta)时,我发现在设计器/ IDE中使用它令人沮丧且古怪。

我当时在自己的博客上发布了一些信息:
http : //blog.dantup.com/2007/08/visual-studio-2008-beta-2-first.html
http://blog.dantup.com/2007 /08/wpf-designer-cider-part-2.html

我在2010年还没有尝试过,尽管我已经和一些有经验的人进行过交谈,而且听起来好像还有些复杂/烦人。

我认为您的应用程序无疑在WPF中看起来/感觉会更好,但是我也认为这将花费您更长的构建时间,并且您将一路狂奔。


“我认为您的应用程序无疑将在WPF中看起来/感觉更好”。不一定-WPF不会使您免于编写糟糕的UI。我在这里有一些示例(其中一个是我的,尽管那只是一个快速的'n'肮脏的一次性应用程序,用于测试某些东西。)如果您(和那些做主的人,也称为$$)愿意花钱时间和精力,您可以在WPF中做一些令人惊奇的事情。
MetalMikester'3

有道理。我的意思是WPF 允许您创建一个更漂亮的应用程序,因为您不受Windows小部件的约束。当然,这既是好事,也可能是坏事!
Danny Tuppeny 2011年

3
绝对是一件坏事。WPF迎来了一个完全非本地接口的时代。很难理解,甚至更难看。一个人认为美丽是另一个人最糟糕的噩梦。将“外观”留给内置的OS控件是一种使每个人都开心的绝妙方法。再说一次,由于我受不了界面,我拒绝使用最新版本的Office。所以,你知道,下车我的草坪和东西。
科迪·格雷

1
我会说这有点主观。我可能不希望我的Word Pocessor违反所有这些规则,但是某些软件可以摆脱它。例如。我记得看到的最好的WPF示例之一是
Yahoo-
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.