WPF和WinForms有什么区别?

时间:2009-08-26 20:39:13

标签: wpf winforms

我正在编写简单的Windows应用程序。我不需要DB支持。为什么我会使用WPF而不是WinForms?

10 个答案:

答案 0 :(得分:56)

一个明显的答案是,WPF提供了比WinForms更丰富的用户体验,例如在用户界面中允许动画甚至是3D。

从开发的角度来看,强制将用户界面(在XAML中)与业务逻辑(在VB.NET或C#中)分离是一件好事。

Google搜索“WPF vs WinForms”会引发大量讨论此问题的网页。我不会在这里重复他们的所有发现,但this page提出了一些有趣的观点:

  
      
  1. WPF中的数据绑定优于Windows Forms提供的功能。
  2.   
  3. UI和C#业务逻辑可以在WPF中完全分离
  4.   
  5. 故事板
  6.   
  7. 数据/控制模板 - 比Windows更清晰的方式   表格可以提供。
  8.   
  9. 风格 - 酷而简单。它很容易设计所有按钮的样式   应用程序具有相同的外观和   感觉。
  10.   
  11. 即使VS设计师破解,也很容易编码XAML。
  12.   
  13. 用户界面虚拟化 - 我有100K行的网格,勾勒出移动   市场。表现会很糟糕   如果它不是用于UI可视化   这是免费的。
  14.   
  15. 3D支持。
  16.   
  17. 没什么科学的,但UI开发在WPF中感觉更快 -   也许只是因为一个WPF   应用程序看起来更酷   迭代,或者也许是因为   发展确实更快。
  18.   
  19. 我可以为我的团队添加一个用户体验工程师,没有C#   知识他可以在魔术中发挥作用   Expression Blend并给出   前台交易应用程序   保证赢得的改造   对业务用户而言。
  20.   

答案 1 :(得分:15)

WPF是开发Windows桌面应用程序的当前平台。它是一个现代的,先进的,硬件加速的框架,用于开发维护关注点分离的应用程序。它支持2D矢量和3D图形的高级渲染,为构建丰富,交互式和高质量的用户界面提供了广泛的功能。

另一方面,Winforms提供了一个基本平台,用于使用标准控件开发具有标准外观的“经典”Windows应用程序。它不提供WPF提供的丰富的硬件加速矢量2D和3D功能。 Winforms应用程序往往在应用程序行为和UI(视图)之间有更大的耦合,这为开发应用程序提供了一个不太灵活的平台。

至于您选择哪一种,完全取决于您的需求。如果您需要矢量图形,3D渲染,创建丰富,交互式,动画,现代用户界面和/或希望保持关注点分离的能力,WPF绝对是正确的选择。如果您不需要这些,只需要创建一个简单的UI来解决一个简单的问题,winforms就能很好地满足您的需求。

答案 2 :(得分:14)

  • 学习。
  • 对程序的外观有更大的控制(即任何)
  • 受益于更轻松的数据绑定,触发器,样式

(我不知道DB支持与它有什么关系)

答案 3 :(得分:6)

WinFormsWPF之间最重要的区别在于,虽然WinForms只是标准Windows控件(例如TextBox)之上的一层,但WPF是从头开始构建的几乎在所有情况下都不依赖于标准的Windows控件。这似乎是一个微妙的区别,但实际上并非如此,如果你曾经使用过依赖Win32 / WinAPI的框架,你肯定会注意到。

一个很好的例子就是一个带有图像和文字的按钮。这不是标准的Windows控件,因此WinForms不提供开箱即用的这种可能性。相反,您必须自己绘制图像,实现自己的支持图像的按钮或使用第三方控件。使用WPF,按钮可以包含任何内容,因为它基本上是内容和各种状态的边界(例如,未触摸,悬停,按下)。与大多数其他WPF控件一样,WPF按钮是“无外观”,这意味着它可以包含一系列其他控件。你想要一个带图像和一些文字的按钮?只需将一个Image和一个TextBlock控件放在按钮内,就可以了!你只是没有从标准的WinForms控件中获得这种灵活性,这就是为什么有相当简单的控件实现的大市场,比如带图像的按钮等等。

这种灵活性的缺点是,有时你必须更加努力地使用WinForms来实现一些非常容易的东西,因为它是为你需要它的场景而创建的。至少在开始时就是这样,你发现自己创建模板来创建一个带有图像的ListView和一些很好的对齐文本,这是WinForms ListViewItem在一行代码中所做的事情。

这只是一个区别,但是当你使用WPF时,你会发现它实际上是许多其他差异的根本原因 - WPF只是以自己的方式做事,无论好坏。 。你不再局限于以Windows的方式做事,但为了获得这种灵活性,当你真的只是想用Windows做事时,你会付出更多的工作。

答案 4 :(得分:4)

WPF可以在某种程度上利用硬件加速,但预计会随着时间的推移而改善。

此外,由于XAML,您可以选择“做事”,声明性与程序性,或两者兼而有之。

微软不再对winforms进行积极的开发,他们强烈推动WPF,并且有充分的理由。

WPF允许更容易的“解决方案不可知”设计。为了在winforms中实现这一点,这是很多更多的工作。

在其中一条评论中已经提到了MVVM模式,根据我的经验,这允许我们对你的代码进行真正的单元测试而不是基于GUI的测试,这是一个重大胜利。 / p>

答案 5 :(得分:2)

没有人提到WPF应用程序的更好测试功能(如果它们以正确的方式编写,例如基于MVVM模式)。

答案 6 :(得分:1)

如果您希望拥有丰富的用户界面,例如previous question中发布的图片,我建议您使用WPF。除了使创建一个漂亮的应用程序更容易之外,它也是微软未来推出的技术。 Winforms几乎没有新的发展。

答案 7 :(得分:1)

A

  

由于XAML而在任何地方执行。

     

可用作WinApp,WebApp,移动。

     

WindowsForm内部用户界面表示形式为C#。

B

  

绑定->简单的对象到对象数据传输。

C

  

常见外观(样式)->可以共同定义外观样式并将其用于一堆控件。

D

  

指令性编程->绑定XAML中的对象。

E

  

表达融合和动画-> WPF使用DirectX,DirectX可以用于动画。

F

  

快速执行(硬件渲染)

     

WPF内部使用DirectX(硬件渲染),而Winform内部使用GDI(主要使用软件渲染)。

     

计算机通过两种方式在监视器上呈现显示。

     

1)(CPU)软件渲染-> CPU渲染时,CPU驱动显示器上渲染显示的整个逻辑。CPU还执行其他操作,例如运行应用程序,执行内存管理,运行OS。因此,最重要的是要在监视器上显示内容。

     

2)(GPU)硬件渲染->其专门的kinda处理器,专门用于在显示器上更快地渲染和显示。

     

现在在WPF中,此渲染已在

中进一步优化
>Tier 0 mode (Software rendering) uses DirectX7 internally,

>Tier 1 mode (Partial Hardware rendering) uses DirectX7 to DirectX9 internally,

>Tier 2 mode (Hardware rendering) uses DirectX9 internally. 

G

  

图形独立性(DIP)->分辨率独立性

     

分辨率->适合屏幕/显示器的像素总数

     

像素->屏幕上的简单点。

     

Windows窗体使用像素作为度量单位,因此当像素变化时,win窗体必须自行调整,这意味着我们必须为其编写逻辑。

     

但是WPF不使用像素作为度量单位,而是使用DIP(与设备无关的像素)

     

1 DIP =英寸的1/96英寸。

最后一次测试->使用MVVM模式进行更好的单元测试。

答案 8 :(得分:0)

WPF与Winforms相比的优点和缺点:

  1. 相对容易地制作非常丰富的UI的能力。
  2. 更轻松的动画和特殊效果
  3. 固有的可伸缩性
  4. 强大的样式和蒙皮结构
  5. 轻松创建自己的外观
  6. 是否支持Windows窗体
  7. 开发Vista应用程序的未来技术
  8. 重用现有代码的能力
  9. 可能进行高级数据绑定
  10. 说明性代码与程序代码
  11. 需要.NET Framework 3.0
  12. 与Windows窗体相比,仍处于开发阶段
  13. 需要Dx9兼容显卡才能获得高级图形

但是,WPF有一些缺点,其中WinForms排名第一:

  1. WPF的内置控件套件比WinForms的控件套件要受限制得多。
  2. 第三方控件空间中对WinForms的支持更大。 (这种情况正在发生变化,但是就目前而言,由于时间的原因,WinForms在社区中获得了更大的支持。) 3.WPF无法在Windows 2000或更低版本上运行。
  3. 在Internet上可以找到关于WIN表格的大量文档
  4. 有关WIN表单的大量示例
  5. 在应用程序中设计自己的外观和感觉是很多工作。 7.C#运行较慢。尽管当前使用WPF应用程序的启动仍然有些缓慢,但是在使用WPF时需要一定程度的照顾。但是,程序启动后,动画效果都非常流畅。

答案 9 :(得分:0)

  • WinForms 和 WPF 之间最重要的区别在于,虽然 WinForms 只是标准 Windows 控件(例如 TextBox)之上的一个层,但 WPF 是从头开始构建的,不依赖于标准Windows 控件几乎适用于所有情况。

  • 一个很好的例子是一个带有图像和文本的按钮。这不是标准的 Windows 控件,因此 WinForms 不提供这种开箱即用的可能性。相反,您必须自己绘制图像,实现自己的支持图像的按钮或使用第 3 方控件。使用 WPF,按钮可以包含任何内容,因为它本质上是一个包含内容和各种状态(例如未触摸、悬停、按下)的边框。

查看这篇文章,它将帮助您: https://www.wpf-tutorial.com/about-wpf/wpf-vs-winforms/#:~:text=The%20single%20most%20important%20difference,controls%20in%20almost%20all%20situations