WPF教程(二) WPF vs WinForms

在前面的章节,我们讨论了WPF是什么,还涉及了一点点WinForms。在本章节,我将尝试比较两者,尽管它们服务的目的一样,却存在很多的区别。如果你以前从来没有接触过WinForms,或者WPF是你学习的第一种GUI框架,请跳过这一章节。但是如果你有兴趣的话,不妨尝试一读。先说说两者最重要的区别。WinForms只是标准窗体控件顶部的一层(如文本框),而WPF从零开始,几乎在所有场景下都不依赖于

大家好,又见面了,我是你们的朋友全栈君。

在前面的章节,我们讨论了WPF是什么,还涉及了一点点WinForms。在本章节,我将尝试比较两者,尽管它们服务的目的一样,却存在很多的区别。如果你以前从来没有接触过WinForms,或者WPF是你学习的第一种GUI框架,请跳过这一章节。但是如果你有兴趣的话,不妨尝试一读。

先说说两者最重要的区别。WinForms只是标准窗体控件顶部的一层(如文本框),而WPF从零开始,几乎在所有场景下都不依赖于标准窗体控件。这个区别看起来似乎微不足道,但是如果你之前有用过依赖于Win32/WinAPI框架的话,你一定不会这么认为。

举一个很好的栗子,现在有一个带图片和文字的按钮。它并不是一个标准窗体控件,WinForms无法提供现成的,你不得不自己画图片,实现支持图像的按钮,或使用第三方控件。相反,在WPF,按钮可以包含任何东西,因为它本质上是一个带内容和不同状态的边框。WPF的按钮就好像是一个看不见的物体,可以放入各种其他控件到里面,不部分WPF控件都是如此。你是想要一个带图片和文字的按钮?很简单,只要把一张图片和一个文本块放到按钮里面就搞定了。在标准WinForms控件之外好像你找不到这种灵巧的方式,这就是为什么像带图片的按钮这种简单的控件实现会有如此大市场的原因。

这种灵活性的缺点是你必须付出更大的努力去实现某个东西,而在WinForms却是非常容易的。因为它只是在你所使用的场景下创建的,无法通用。至少在最开始的时候是这种感觉,你创建了一个模块,建立了一个带图片和一些对齐文字的ListView,这个时候你发现这个在WinForm ListViewItem只是一行代码的事。

这仅仅是一个区别而已,当你在使用WPF时,你会发现其实在其他区别上,这些背后的原因是一样的:WPF只用自己的方式来处理事情,要么更好要么更差。你不再被Windows方式所约束,但是,得到这种灵活性的代价是,你需要付出更多的努力。

下面的表完整列出了WPF和WinForms的优势,它能让你更多的理解你要进入的领域。

WPF优势

1.比较新,从而更符合目前的标准。

2.微软正在使用它开发很多新应用,比如Visual Studio。

3.更灵活,你不必再去自己写控件或者买控件。

4.你所使用的第三方控件更多的聚焦在WPF上,因为它比较新。

5.XAML使得GUI的创建和编辑更加容易,而且允许拆分设计器(XAML)和代码器(C#, VB.NET).

6.数据绑定,你可以更加彻底的分离数据和布局.

7.用硬件加速绘制图形用户界面,性能更好。

8.允许你在Windows应用和web应用之间进行用户交互。

WinForms优势

1.出现比较久,已经经历很多检验和测试。

2.已经有很多第三方控件供你购买或者免费使用。

3.Visual Studio设计器仍然更适合WinForms,在WPF很多东西你还是需要自己去开发。



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127074.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 细说 里氏替换原则[通俗易懂]

    细说 里氏替换原则[通俗易懂]转载:细说LSP(里氏替换原则)|chengco的博客前言曾经在一次给新入职员工做Java开发的课程培训,讲到面向对象的SOLID设计原则时,大家普遍认为”里氏替换原则”是其中最难理解的一个。也许从头说起才能弄清来龙去脉。为什么叫里氏替换原则?里氏替换原则在SOLID这五个设计原则中是比较特殊的存在:如果违反了里氏替换原则,不只是降低软件设计的优雅性,很可能会导致Bug 只有里氏替换原则是以人名命令的里氏替换原则译自Liskovsubstitutionprinciple

    2022年10月25日
    0
  • 狂神说Java全栈学习路线

    狂神说Java全栈学习路线很多同学学习Java苦于没有自己的完整学习步骤,在这里,秦老师给大家奉上一份完整的学习计划~干货满满,关注收藏转发呀!不胜感激!一、Java基础二、JavaWeb三、SSM框架四、Lin…

    2022年5月16日
    34
  • fgc java,频繁FGC的真凶原来是它

    fgc java,频繁FGC的真凶原来是它频繁FGC的真凶原来是它上周排查了一个线上问题,主要现象是CPU占用过高,jvmold区占用过高,同时频繁fgc,我简单排查了下就草草收场了,但是过后我对这个问题又进行了复查,发现问题没有那么简单,下面跟着我一起分析一下到底是怎么回事?复查过程复查原因事后再看dump文件注意到最大的对象是一个ArrayList,里面几乎都是ElasticSearchStatusException对象可是发生…

    2022年6月19日
    77
  • 2. CMake 系列 – 编译多文件项目

    2. CMake 系列 – 编译多文件项目

    2021年11月22日
    40
  • C++利用stringstream进行类型转换「建议收藏」

    C++利用stringstream进行类型转换「建议收藏」利用STL中sstream库的字符串流(stringstream)可以非常方便地进行类型转换,尤其是字符串和数字的转换。例:整型和字符串类型的相互转化#include<sstream>//开头记得加上这个//整型转换为string类型stringint2string(intnum){stringstreamss;ss<<num…

    2022年5月18日
    35
  • Visio 2010工具产品密钥

    Visio 2010工具产品密钥最近需要安装Visio2010来进行画图工作的需要,因此在网上找了好长时间的产品密钥,这是我亲测之后觉得有效的,大家可以根据我下面的这些产品密钥来激活Visio2010。具体的密钥如下:GR24B-GC2XY-KRXRG-2TRJJ-4X7DCVWQ6G-37WBG-J7DJP-CY66Y-V278X2T8H8-JPW3D-CJGRK-3HTVF-VWD83HMCVF-BX8YB-…

    2022年6月1日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号