【问题标题】:What is WPF and how does it compare to WinForms?什么是 WPF,它与 WinForms 相比如何?
【发布时间】:2009-02-26 00:58:36
【问题描述】:

我一直在研究 WPF,但我从来没有真正使用过它(除了 15 分钟,它提示了这个问题)。我查看了这个post,但它实际上是关于 WPF 的“Flash”。那么 Windows 窗体应用程序和 WPF 应用程序有什么区别呢?

【问题讨论】:

标签: c# wpf windows


【解决方案1】:

WPF 是基于矢量图形的 UI 表示层,而 WinForms 不是。为什么这很重要/有趣?通过基于矢量,它允许表示层平滑地将 UI 元素缩放到任意大小而不会失真。

WPF 也是一个可组合的表示系统,这意味着几乎任何 UI 元素都可以由任何其他 UI 元素组成。这使您可以轻松地从更简单的 UI 元素构建复杂的 UI 元素。

WPF 还完全支持数据绑定,这意味着您可以将 UI 元素的任何属性绑定到 .NET 对象(或对象的属性/方法)、另一个 UI 元素的属性或数据。是的,WinForms 支持数据绑定,但方式更加有限。

最后,WPF 是“可换肤”或“可主题化”的,这意味着作为开发人员,您可以使用列表框,因为这些是您需要的行为,但有人可以“换肤”使其看起来完全不同。

想象一个图像列表框。您希望内容实际上是图像,但您仍然需要列表框行为。这在 WPF 中是非常简单的,只需使用列表框并更改内容表示以包含图像而不是文本。

【讨论】:

  • 我很确定在 WinForm 中您几乎可以将任何属性绑定到任何东西。这就是为什么 DataBindings.Add() 需要字符串、对象、字符串的原因。所以它可以使用反射将属性绑定在一起。
  • Silverlight 使用 WPF 的 XAML 功能的一个子集,因此了解如何编写基于 WPF 的应用程序会使 Silverlight 小程序变得如此简单。
  • 那么用户能分辨出 WPF 和 WinForm 之间的区别吗?
  • @Lucas - 我个人可以,但我不确定“普通”用户是否可以。如果他们注意,这是可能的(特别是如果他们知道自己在寻找什么)。
  • @Lucas - 一种判断方法是使用 Windows 的放大镜。当您放大本机应用程序(如 Winforms 应用程序)时,您会得到像素化。如果您放大 WPF 应用程序,它会完美放大,这要归功于基于矢量。
【解决方案2】:

了解这个问题的一个好方法可能是从询问 Winforms 到底是什么开始。

Winforms 和 WPF 都是旨在使应用程序的 UI 层更易于编码的框架。这里真正的老人们可能会谈论如何编写“Hello, World”的 Windows 版本可能需要 4 页左右的代码。此外,那时的岩石要软得多,我们在编码时不得不与巨型蜥蜴作战。 Winforms 库和设计器承担了许多常见任务并使它们更易于编写。

WPF 做同样的事情,但意识到这些常见任务现在可能包含更多视觉上有趣的东西,除了包括许多 Winforms 不一定认为是 UI 层的一部分的东西。 WPF 支持命令、触发器和数据绑定的方式都是框架的重要组成部分,但其核心原因与 Winforms 最初存在的核心原因相同。

WPF 的改进在于,您现在可以将控件的功能与其外貌。描述我们的控件在 XAML 中的外观并将其与控件在代码中的工作方式分开的能力与 Web 程序员习惯使用的 HTML/代码模型非常相似。

优秀的 WPF 应用程序遵循与优秀的 Winforms 应用程序相同的模型;将尽可能多的东西保留在 UI 层之外。应用程序和数据层的核心逻辑应该是相同的,但是现在有更简单的方法可以让视觉效果更令人印象深刻,这可能就是为什么你在上面看到的大多数信息都涉及到更炫的视觉内容。如果您想学习 WPF,您实际上可以像使用 Winforms 一样开始使用它,然后在掌握它们时重构其他功能。作为一个很好的例子,我强烈推荐 Scott Hanselman 关于 BabySmash 开发的系列博文,which start here。这是一个很好的过程演练,无论是在代码上还是在思想上。

【讨论】:

  • 我发现,当我刚开始使用 WPF 时,尝试以 WinForms 的方式做事给我带来了很多问题。在开始使用 WPF、IMO 时,最好尽量从头开始。
  • @Andy 我不得不说是 Scott 的方法真正迫使我更好地理解 WPF。我认为正是这些问题,我不得不使用的技巧来让我的代码正常工作,然后才是真正让我学习的最终“正确”解决方案。
【解决方案3】:

为了回答您的问题,WPF 应用程序一个 Windows 应用程序。 WPF 是微软新的框架(实际上是.NET framework 3.0 的一个子系统),用于编写丰富的Windows 应用程序。它的目的是最终替代 WinForms(尽管公认的采用率比 MS 所希望的要慢得多)。

【讨论】:

    【解决方案4】:

    WPF 代表 Windows Presentation Foundation。虽然 WinForms 技术依赖于 GDI/GDI+,但 WPF 直接构建在 DirectX 之上。这意味着您可以比使用 WinForms 做更多的事情,同时仍然使用 .NET Framework 类库。您可以构建丰富的用户界面、2D/3D 游戏、演示文稿等等。 WPF 很像 Flash (swf) 电影,没有“电影”元素。 WPF 基于 .NET,可用于构建支持 Web 的富客户端应用程序。

    【讨论】:

    • 我喜欢这个答案,部分原因是它包含了对首字母缩略词的解释。但是,如果它提到基于矢量就更好了。
    【解决方案5】:

    从这里开始,有几十个视频:http://www.windowsclient.net/learn

    在这种情况下,营销手册非常好:

    **"Windows Forms 是 .NET Framework 中的一组类,它支持快速开发丰富的 Windows 客户端应用程序,具有用于用户界面控件和图形的强大、可扩展的库。您可以将 WPF 合并到您的 Windows Forms 应用程序中通过 .NET 3.5 框架中的 WPF-Windows 窗体互操作性。"*

    *"WPF 是 Microsoft .NET Framework 3.5 的一个组件,使您能够构建下一代 Windows 用户体验。WPF 支持 UI、媒体、文档、硬件加速、矢量图形、可扩展到不同的外形尺寸、交互式数据可视化和卓越的内容可读性。"**

    使用 WPF,您可以获得更好的图形支持、更强大和更灵活的数据绑定(如果您正在使用数据,请使用 WPF。)

    【讨论】:

      【解决方案6】:
      1. WPF 本质上是一个用于为 Windows 平台创建图形用户界面的新 API。
      2. WPF 不仅仅是用于构建 Windows 客户端应用程序以及视觉上令人惊叹的用户界面的下一代演示系统。
      3. WPF 构建在 DirectX (Direct3D) 之上,而不是依赖于旧的 GDI/GDI+ 子系统。
      4. WPF 是基于矢量图形的 UI 表示层,基于矢量,它允许表示层平滑地将 UI 元素缩放到任意大小而不会失真。
      5. WPF 是“可换肤”和“可主题化”的。这意味着 WPF 允许更改任何 UI 控件的外观。

      【讨论】:

        【解决方案7】:

        从实现的角度来看,主要区别之一是 WPF 使用严格强制执行的模型-视图-视图模型 MV-VM 架构,视图以自定义标记语言 XAML 定义,视图模型是可访问的类属性,并且模型实际上是数据访问层。相比之下,WinForms 没有这种明确的分离——尽管按照惯例,不同的方面可能会被分组到不同的 C# 文件中,但它仍然是代码。在实践中,这使得 WPF 开发更像是 Web DOM 开发,WPF 框架在后台运行并作为中介。

        【讨论】:

          猜你喜欢
          • 2021-11-21
          • 2011-05-29
          • 2011-07-24
          • 1970-01-01
          • 2012-03-19
          • 2021-10-14
          • 2010-10-21
          • 1970-01-01
          • 2016-06-08
          相关资源
          最近更新 更多