【发布时间】:2009-08-26 20:39:12
【问题描述】:
我正在编写简单的 Windows 应用程序。我不需要数据库支持。为什么我要使用 WPF 而不是 WinForms?
【问题讨论】:
-
也许您应该提供更多信息以获得好的建议。你的应用是做什么的?
我正在编写简单的 Windows 应用程序。我不需要数据库支持。为什么我要使用 WPF 而不是 WinForms?
【问题讨论】:
一个明显的答案是,WPF 提供了比 WinForms 更丰富的用户体验,例如,允许在用户界面中使用动画(甚至是 3D)。
从开发的角度来看,强制将用户界面(在 XAML 中)与业务逻辑(在 VB.NET 或 C# 中)分离是一件好事。
Google 搜索“WPF 与 WinForms”会显示很多讨论此问题的页面。我不会在这里重复他们的所有发现,但this page 提出了一些有趣的观点:
- WPF 中的数据绑定优于 Windows 窗体提供的。
- UI 和 C# 业务逻辑可以在 WPF 中清晰分离
- 故事板
- 数据/控制模板 - 比任何 Windows 都更简洁的方式 表格可以提供。
- 风格 - 酷而简单。将所有按钮的样式设置在一个 应用程序具有相同的外观和 感觉。
- 即使 VS 设计器出现问题,也可以轻松编写 XAML。
- UI 虚拟化 - 我有 100K 行的网格,勾选移动 市场。表现会很糟糕 如果不是为了 UI 可视化 免费提供。
- 3D 支持。
- 没有什么科学依据,但在 WPF 中 UI 开发感觉更快 – 也许只是因为 WPF 应用程序在结束时看起来更酷 一次迭代,或者可能是因为 开发确实更快。
- 我可以在我的团队中添加一名用户体验工程师,并且无需 C# 他可以施展魔法的知识 Expression Blend 并给出 前台交易应用程序a 保证会赢的改造 超过业务用户。
【讨论】:
WPF 是当前用于开发 Windows 桌面应用程序的平台。它是一个现代的、先进的、硬件加速的框架,用于开发保持关注点分离的应用程序。它支持 2D 矢量和 3D 图形的高级渲染,为构建丰富、交互式和高质量的用户界面提供了广泛的功能。
另一方面,WinForms 为使用标准控件开发具有标准外观和感觉的“经典”Windows 应用程序提供了一个基本平台。它不提供 WPF 提供的丰富的硬件加速矢量 2D 和 3D 功能。 WinForms 应用程序往往在应用程序行为和 UI(视图)之间有更大的耦合,这为开发应用程序提供了一个不太灵活的平台。
至于选择哪一种,完全看你的需求。如果您需要矢量图形、3D 渲染、创建丰富、交互式、动画、现代用户界面的能力,和/或希望保持关注点分离,那么 WPF 绝对是正确的选择。如果你不需要这些,只需要创建一个简单的 UI 来解决一个简单的问题,WinForms 就能很好地满足你的需求。
【讨论】:
(我看不出数据库支持与它有什么关系)
【讨论】:
WPF 可以在一定程度上利用硬件加速,但预计会随着时间的推移而改进。
此外,由于 XAML,您可以选择更多“做事”、声明式与编程式或两者兼而有之。
Microsoft 不再积极开发 WinForms,他们正在大力推动 WPF,这是有充分理由的。
WPF 允许更轻松的“与分辨率无关”的设计。要在 WinForms 中实现这一点,还需要很多工作。
MVVM 模式已经在其中一个 cmets 中提到,这允许您对代码进行真正的单元测试与基于 GUI 的测试,根据我的经验,这是一个巨大的胜利。
【讨论】:
没有人提到 WPF 应用程序的更好测试能力(如果它们以正确的方式编写,例如基于 MVVM 模式)。
【讨论】:
一个
由于 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 模式进行更好的单元测试。
【讨论】:
如果您想拥有像previous question 中发布的图片那样丰富的用户界面,我建议您使用 WPF。除了使创建漂亮的应用程序变得更容易之外,这也是微软未来将推动的技术。 Winforms 几乎没有新的发展。
【讨论】:
WinForms 和 WPF 之间最重要的区别在于,虽然 WinForms 只是标准 Windows 控件(例如 TextBox)之上的一个层,但 WPF 是从头开始构建的,不依赖于标准 Windows 控件。几乎所有情况。
一个很好的例子是一个带有图像和文本的按钮。这不是标准的 Windows 控件,因此 WinForms 不提供开箱即用的这种可能性。相反,您必须自己绘制图像,实现自己的支持图像的按钮或使用第 3 方控件。使用 WPF,按钮可以包含任何内容,因为它本质上是一个包含内容和各种状态(例如未触摸、悬停、按下)的边框。
【讨论】: