在这个论坛上经常有这样开头的问题
我正在编写一个 WinForms 应用程序。[...]
我个人尝试过在 Win Form 和 WPF 上写,在我看来,WPF 在 UI 元素的设计方面更准确,更漂亮。此外,WPF 附带了一种很棒的 Xaml 语言,它比在 WinForms 中使用C#代码更容易使用。
对此,我问自己:Win Form 相对于 WPF 有什么优势,为什么很多人用 Win Form 编写,虽然它们设计过时且不受支持?
在这个论坛上经常有这样开头的问题
我正在编写一个 WinForms 应用程序。[...]
我个人尝试过在 Win Form 和 WPF 上写,在我看来,WPF 在 UI 元素的设计方面更准确,更漂亮。此外,WPF 附带了一种很棒的 Xaml 语言,它比在 WinForms 中使用C#代码更容易使用。
对此,我问自己:Win Form 相对于 WPF 有什么优势,为什么很多人用 Win Form 编写,虽然它们设计过时且不受支持?
WPF 确实比 WinForms 有很多优势。
Binding我将调用绑定 ( ) 和的概念DataContext,它从根本上促进编写结构良好的程序,其中表示与模型、业务逻辑和内容分离,这是一个特别重要的优势。(并不是说在 WinForms 中不能正确编写,它要困难得多并且需要手动工作。)
但这样做的后果和缺点是 WPF 作为框架的复杂性要高得多,进入WPF 的门槛要高得多,正确的编程实践也更高。毕竟,当您开始将内容与表示分离时,WPF 的威力就会显现出来,否则它并不比 WinForms 好多少。
对于那些在 MFC 或类似的 UI 框架中有编程经验的人来说,切换到几乎相似的 WinForms 比学习有助于简单、方便的 WPF 编程的新概念(尽管更方便和高效)要容易得多。
我认为这是 WinForms 仍然存在的主要原因。
我不了解其他人,但我个人不记得上次使用 WinForms 是什么时候,如果桌面只是 WPF,无论听起来多么浮夸,在这种环境下它仍然领先于其他环境。不管是狗血的企业,还是“花蝴蝶”的应用,都无所谓。
和一堆一切。此外,这项技术背后的思想、原则和哲学对我来说非常有吸引力,亲切而富有同情心。同时,我不是 WinForms 的狂热反对者或 WPF 狂热者,但如果你想一想,想想在“表单”上做什么是值得的,在 WPF 中实现了什么5 或 10 分钟,您就会不由自主地了解这项技术提供的所有力量和那些可能性。
同时,就像一切平凡的事物一样,WPF 并不完美,也不是没有缺陷,但总有更多优点,这是事实。
这些人很可能是刚刚开始学习 .NET 的初学者。自然地,他们从更容易学习的 WinForms 开始。对他们来说,有些东西已经过时、不受支持等并不重要。他们的目标是学习如何编写程序。
关于过时的设计,我不理解你......
关于对 Win Forms 的支持,在我看来它并没有消失,你可以通过阅读有关 Visual Studio 2017 和 .net 4.7 的新闻看到这一点。
我的个人观察:
由于在 DirectX 上的工作,WPF 谈到了在屏幕上呈现元素的惊人速度。我的电脑非常适合每个人 - CPU 和 GPU,但实际上,在 Win Forms 中在屏幕上绘图要快得多(GDI 也不会停滞不前)。
WPF 上的 DataGrid 控件非常原始(至少几年前是这样)。一般来说,这是呈现数据最重要的控件。它应该是非常通用的,在 Win Forms 中是这样,但在 WPF 中不是。对于DataGrid(WPF)中的数据虚拟化,只能通过DataSource来使用数据源本身的虚拟化。
在 Win Forms 中,由于良好的旧事件机制(CellVlueNeeded 和 CellValueFormating),您实际上可以使用 DataGridView 做任何事情,而且它非常简单(好吧,DataSource 也已就位)。
顺便说一下,有人可以告诉我 DataGrid 中是否有一种方法可以通过编程将焦点放在行号 N 上,而无需使用反射求助于 30 行代码?
以我的拙见,WPF 非常适合飞行和飘动的星形按钮比其他任何东西都重要的应用程序。
对于业务应用程序,其他一切都很重要,人们会长时间使用这些应用程序,每天使用多个小时。它们的功能很复杂,而且通常是非标准的。因此,他们的界面应该尽可能实用,而不是引起人们的注意。一个人不应该厌倦多彩和卡通化的界面。
赞成WPF,我只能说在里面建界面的原理很有意思,因为它和网页里面的差不多。它非常有趣,但仍然很潮湿(仍然!WPF 是什么时候首次引入的!?)......是的,我不喜欢 XAML。
-;)