转自:https://blog.csdn.net/bitfan/article/details/6128391

WPF、Windows Forms和Silverlight间的联系和区别

收到了一封学生的邮件:

===========================

金老师您好:
最近在学C#.NET,基本语法学习的差不多了,接下来准备学习图形界面设计部分。但是我目前对于.NET的WinForm、wpf、silverlight这三者的关系弄的不是很清楚,一般书中很少介绍wpf和silverlight,网上搜了一下关于WinForm和wpf的区别,有的说WinForm是wpf的子集,有的说WinForm和wpf是共存关系,弄的很乱。想请教一下您这三者之间到底有什么样的关系呢?
您的学生
===========================
以下是我对这三者间关系的理解,如果不对,请业界朋友指正。
在Windows中,诸如窗体绘制等功能由GDI实现,放在操作系统内核中。Windows Forms在底层使用的是GDI+。GDI+是GDI的“面向对象包装”,使用C++实现。.NET Windows Forms应用程序中使用的GDI+其实是在C++实现的非托管代码之上又包了一层,从而让我们能使用C#这样的托管编程语言调用GDI+功能绘图。
WPF底层使用的是DirectX,就是通常用来开发游戏的那个DirectX。WPF与Windows Forms这两者并没有什么关系。按照微软的意图,WPF是用来取代Windows Form的,所以最新的Visual Studio就使用了WPF开发界面,这是一个很明确的信号。
当然,出于兼容目的,Windows Forms与WPF将长期并存,可以把它们看成是两套独立的界面技术。
Silverlight在API层可以看成是WPF的子集,但事实上除了这点之外,Silverlight与WPF并没有任何联系。因为Silverlight应用程序不依赖于.NET Framework,只要用户计算机(或手机)安装有Silverlight运行环境(比如用户通过互联网给浏览器添加了Silverlight插件),就可以跑Silverlight应用程序,并不要求用户安装庞大的.NET Framework。Silverlight运行时环境在API层面也可以看成是标准.NET Framework的功能子集,但它完全是重新写过的,独立于标准的.NET Framework,虽然为了方便应用程序开发,微软努力保持两者在API层面的一致性,但并不排除Silverlight运行时环境日后会拥有全新的为.NET标准环境所不具备的功能。
Windows Forms/WPF/Silverlight这三者其实是独立发展的三个技术领域,只不过微软出于方便开发的目的,有意让Silverlight与WPF在应用层面开发体验(甚至包括大部分应用层代码)高度一致罢了。
从开发角度来看,Windows Forms已有多年的历史,高度成熟,拥有大量的第三方控件等各种资源,如果开发“标准”与“通用”界面类型的Windows应用程序,使用它可以获得较高的开发效率和不错的运行性能。

WPF的长处在于它可以开发非常“个性化”的Windows应用程序,你可以不受任何限制地实现你所能“梦想”到的各种用户界面,而且在动画等多媒体方面,WPF优于Windows Forms,另外,WPF的数据绑定机制也比Windows Forms要强大和灵活。WPF的短处在于它对计算机硬件的要求较高,对于硬件配置较低的计算机,其运行性能不如Windows Forms版本。就目前来看,WPF的最佳平台是Windows 7。
Windows Forms和WPF主要用于开发桌面应用程序,Silverlight主要战场是互联网,通常用它来开发RIA的互联网应用程序,或者是跑在手机等智能移动设备上的应用程序。可以这样说,会WPF,不费太多力气,就可以转去开发Silverlight应用程序,两者实在是太相似了,特别是界面层代码,由于都使用XAML,这使我们可以比较容易地为某一应用程序同时开发“桌面版”、“手机版”和“浏览器版”三种版本,而这三种版本其用户界面都可以拥有一致的外观和用户使用体验。

WPF、Windows Forms和Silverlight区别相关推荐

  1. 分析现有 WPF / Windows Forms 程序能否顺利迁移到 .NET Core 3.0

    今年五月的 Build 大会上,微软说 .NET Core 3.0 将带来 WPF / Windows Forms 这些桌面应用的支持.当然,是通过 Windows 兼容包(Windows Compa ...

  2. 分享Silverlight/WPF/Windows Phone一周学习导读(1月9日-1月16日)

    分享Silverlight/WPF/Windows Phone上周学习导读. 本周Silverlight学习资源更新: Prism 4学习笔记之Module Jason Li WPF/Silverli ...

  3. .NET Core 3.0特性初探:C# 8、WPF、Windows Forms、EF Core

    .NET Core的下一个主要版本最近进入了预览阶段,.NET Core 3.0将支持使用Windows Presentation Foundation (WPF).Windows Forms(Win ...

  4. 分享Silverlight/WPF/Windows Phone一周学习导读(8月15日-8月19日)

    分享Silverlight/WPF/Windows Phone一周学习导读(8月15日-8月19日) 本周Silverlight学习资源更新: Silverlight Tools 4安装时的错误提示 ...

  5. 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(4月16日-4月22日)

    分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(4月16日-4月22日) 本周Silverlight学习资源更新 银光中国网友原创:Silverlight中获取 ...

  6. 分享Silverlight/WPF/Windows Phone一周学习导读(07月18日-07月24日)

    上周,微软推出Silverlight新版官方网站,新网站综合旧版网站内容,并增加更多Silverlight学习资源以及案例展示,Silverlight官网是学习Silverlight开发技术的主要资源 ...

  7. 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(4月2日-4月8日)

    分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(4月2日-4月8日) 本周Silverlight学习资源更新 Microsoft Silverlight 4从入 ...

  8. 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(1月9日-1月15日)

    分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(1月9日-1月15日) 本周Silverlight学习资源更新 Silverlight4Beta之Binding ...

  9. 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(12月12日-12月18日)

    分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(12月12日-12月18日) 本周Silverlight学习资源更新 Silverlight学习小记 阿里山地方 ...

最新文章

  1. 台式电脑可以练计算机二级嘛6,练习六-计算机二级考试OFFICE高级应用试卷与试题.pdf...
  2. vue从入门到精通之基础篇(三)生命周期
  3. [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了
  4. 理解 Linux 中 `ls` 的输出
  5. 工作108:swiper使用
  6. 找个轻量级的Log库还挺难
  7. azure kinect三维点云_三维重建技术,你捋清楚了吗?本文适合小白
  8. php ci框架开发手册,CodeIgniter 教程 - php CodeIgniter 框架 - CodeIgniter手册
  9. GitHub高赞,一款足以取代迅雷的开源下载工具
  10. DOSBox 的安装及使用 详细教程
  11. P2P网贷谋求“去担保”:引入保险 收益下滑
  12. java 静态方法中调用非静态方法
  13. 韩信点兵--中国剩余定理
  14. vue操作easyui中的DataGrid
  15. 常见的图像重采样算法
  16. 推特Twitter高级搜索
  17. 【educoder】头歌 数据结构与算法 答案
  18. vulnhub靶场,Monitoring
  19. Google Play 应用上架流程,谷歌商店上架流程
  20. ESP-WRO0M-32(一):VS Code环境搭建

热门文章

  1. (组合数学笔记)Pólya计数理论_Part.1_群的基本概念
  2. python可视化拖拽平台_python 有没有类似 VS 那种可以拖拽界面的 IDE?
  3. 判断RDD有多少个分区
  4. day5 Java中的方法与重载
  5. pandas中计算两列相乘
  6. java web redis_java web网页版redis客户端工具
  7. 什么是静态,静态有什么作用呢?
  8. 【快速入门Linux】6_Linux命令—用户权限相关命令
  9. ROS中阶笔记(九):Movelt!机械臂控制
  10. python字符串_python的字符串怎么拼接