【问题标题】:What is the difference between WPF and WinForms?WPF 和 WinForms 有什么区别?
【发布时间】:2009-08-26 20:39:12
【问题描述】:

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

【问题讨论】:

  • 也许您应该提供更多信息以获得好的建议。你的应用是做什么的?

标签: wpf winforms


【解决方案1】:

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

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

Google 搜索“WPF 与 WinForms”会显示很多讨论此问题的页面。我不会在这里重复他们的所有发现,但this page 提出了一些有趣的观点:

  1. WPF 中的数据绑定优于 Windows 窗体提供的。
  2. UI 和 C# 业务逻辑可以在 WPF 中清晰分离
  3. 故事板
  4. 数据/控制模板 - 比任何 Windows 都更简洁的方式 表格可以提供。
  5. 风格 - 酷而简单。将所有按钮的样式设置在一个 应用程序具有相同的外观和 感觉。
  6. 即使 VS 设计器出现问题,也可以轻松编写 XAML。
  7. UI 虚拟化 - 我有 100K 行的网格,勾选移动 市场。表现会很糟糕 如果不是为了 UI 可视化 免费提供。
  8. 3D 支持。
  9. 没有什么科学依据,但在 WPF 中 UI 开发感觉更快 – 也许只是因为 WPF 应用程序在结束时看起来更酷 一次迭代,或者可能是因为 开发确实更快。
  10. 我可以在我的团队中添加一名用户体验工程师,并且无需 C# 他可以施展魔法的知识 Expression Blend 并给出 前台交易应用程序a 保证会赢的改造 超过业务用户。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:
      • 学习。
      • 更好地(即任何)控制程序的外观
      • 从更简单的数据绑定、触发器和样式中受益

      (我看不出数据库支持与它有什么关系)

      【讨论】:

        【解决方案4】:

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

        此外,由于 XAML,您可以选择更多“做事”、声明式与编程式或两者兼而有之。

        Microsoft 不再积极开发 WinForms,他们正在大力推动 WPF,这是有充分理由的。

        WPF 允许更轻松的“与分辨率无关”的设计。要在 WinForms 中实现这一点,还需要很多工作。

        MVVM 模式已经在其中一个 cmets 中提到,这允许您对代码进行真正的单元测试与基于 GUI 的测试,根据我的经验,这是一个巨大的胜利。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            一个

            由于 XAML 导致的任何地方执行。

            可用作WinApp、WebApp、Mobile。

            而 WindowsForm 内部 UI 表示在 C# 中。

            B

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

            C

            Common look and feel(Styles) -->可以定义通用的look and feel style并将其用于一堆控件。

            D

            Directive Programming -->在 XAML 中绑定对象。

            E

            Expression blend and Animation-->WPF使用DirectX,DirectX可以用于动画。

            F

            更快的执行(硬件渲染)

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

            计算机在显示器上呈现显示的方式有两种。

            1) (CPU) 软件渲染 --> 在 CPU 渲染的情况下,CPU 驱动在显示器上渲染显示的整个逻辑。CPU 还执行其他操作,例如运行应用程序、执行内存管理、运行操作系统。因此,除此之外,它还需要额外的负载来在监视器上显示内容。

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

            现在在 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

            Graphic Independence (DIP) -->表示分辨率独立

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

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

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

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

            1 DIP = 1/96 英寸。

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

            【讨论】:

              【解决方案7】:

              如果您想拥有像previous question 中发布的图片那样丰富的用户界面,我建议您使用 WPF。除了使创建漂亮的应用程序变得更容易之外,这也是微软未来将推动的技术。 Winforms 几乎没有新的发展。

              【讨论】:

                【解决方案8】:
                • 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.

                【讨论】:

                  猜你喜欢
                  • 2012-06-20
                  • 2012-09-04
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-08-22
                  • 2010-09-17
                  • 2011-01-25
                  • 2011-05-18
                  • 2012-11-04
                  相关资源
                  最近更新 更多