最近在学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,这使我们可以比较容易地为某一应用程序同时开发“桌面版”、“手机版”和“浏览器版”三种版本,而这三种版本其用户界面都可以拥有一致的外观和用户使用体验。

  本文来自bitfan博客,转载请标明出处:http://blog.csdn.net/bitfan/archive/2011/01/11/6128391.aspx

WinForm、wpf、silverlight三者关系的更多相关文章

  1. WPF与winform与silverlight的区别

    收到了一封学生的邮件: =========================== 金老师您好: 最近在学C#.NET,基本语法学习的差不多了,接下来准备学习图形界面设计部分.但是我目前对于.NET的Wi ...

  2. WPF基础到企业应用系列7——深入剖析依赖属性(WPF/Silverlight核心)

    一. 摘要 首先圣殿骑士非常高兴这个系列能得到大家的关注和支持.这个系列从七月份開始到如今才第七篇,上一篇公布是在8月2日,掐指一算有二十多天没有继续更新了,最主要原因一来是想把它写好,二来是由于近期 ...

  3. XData -–无需开发、基于配置的数据库RESTful服务,可作为移动App和ExtJS、WPF/Silverlight、Ajax等应用的服务端

    XData -–无需开发.基于配置的数据库RESTful服务,可作为移动App和ExtJS.WPF/Silverlight.Ajax等应用的服务端   源起一个App项目,Web服务器就一台,已经装了 ...

  4. MFC,QT与WinForm,WPF简介

    编程语言的组成编程语言做为一种语言自然和英语这些自然语言有类似的地方.学英语时我们知道要先记26个字母,然后单词及其发音,接下来就是词组,句子.反正简单的说就是记单词,熟悉词法,句法.接下来就是应用了 ...

  5. WPF/Silverlight深度解决方案:(六)HLSL自定义渲染特效之完美攻略(上)

    原文:WPF/Silverlight深度解决方案:(六)HLSL自定义渲染特效之完美攻略(上) Shader Effect种位图特效及2种渲染特效,而Silverlight中仅有这2种渲染特效: Bl ...

  6. Winform开发框架之客户关系管理系统(CRM)的报价单和销售单的处理

    在前面介绍了很多CRM相关的界面和实现思路的随笔文章,本篇继续介绍一下系统中用到的一些经验和技巧片段.本篇随笔主要介绍客户关系管理系统(CRM)的报价单和销售单的处理界面效果,使用列表内置的选择代替弹 ...

  7. Winform开发框架之客户关系管理系统(CRM)的开发总结系列4-Tab控件页面的动态加载

    在前面介绍的几篇关于CRM系统的开发随笔中,里面都整合了多个页面的功能,包括多文档界面,以及客户相关信息的页面展示,这个模块就是利用DevExpress控件的XtraTabPage控件的动态加载实现的 ...

  8. Winform开发框架之客户关系管理系统(CRM)的开发总结系列3-客户分类和配置管理实现

    我在本系列随笔的开始,介绍了CRM系统一个重要的客户分类的展示界面,其中包含了从字典中加载分类.从已有数据中加载分类.以及分组列表中加载分类等方式的实现,以及可以动态对这些节点进行配置,实现客户分类的 ...

  9. Winform开发框架之客户关系管理系统(CRM)的开发总结系列2-基于框架的开发过程

    在上篇随笔<Winform开发框架之客户关系管理系统(CRM)的开发总结系列1-界面功能展示>中介绍了我的整个CRM系统的概貌,本篇继续本系列的文章,介绍如何基于我的<winform ...

随机推荐

  1. Apache htaccess 重写假设文件存在!

    假设文件 data/cache/index.html 存在.那么才重写. 否则使用默认的MVC 重写.by default.fu@foxmail.com RewriteEngine on Rewrit ...

  2. ThinkPHP连接数据库出现的错误:Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'

    最近看了看ThinkPHP.在连接mysql数据库时出现了错误:Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'.意思就是没有PDO(PHP数据对象 ...

  3. Android应用中Back键的监听及处理

    MainActivity如下: package cn.testnbackpressed; import android.os.Bundle; import android.view.KeyEvent; ...

  4. hdu5176(并查集)

    传送门:The Experience of Love 题意:一个叫Gorwin的女孩和一个叫Vivin的男孩是一对情侣.他们来到一个叫爱情的国家,这个国家由N个城市组成而且只有N−1条小道(像一棵树) ...

  5. shortcut switch in terminal start pos & end pos

    ctrl a ctrl e switch in terminal start pos & end pos

  6. Centos 6安装完美搭建mysql、php、apache之旅

    安装apache [root@centos share]# yum -y install httpd Loaded plugins: fastestmirror, refresh-packagekit ...

  7. cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第八部---怪物出场

    /* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦,他说:随便写.第一别全然照搬代码.第二能够说 ...

  8. python实现了字符串的按位异或和php中的strpad函数

    近期在写自己主动化測试,因为开发加密中用到strpad和字符串的按位异或,而python中没有这种函数和功能,所以必须自己写一套,要不自己主动化測试无法进行,所以就用python实现了一下,因为在写字 ...

  9. yum 安装软件时报错

    报错信息 Another app is currently holding the yum lock; waiting for it to exit 处理方法 rm -rf /var/run/yum. ...

  10. 使用NFS安装oracle软件

    昨天.使用openfiler创建nas存储系统,安装oracle软件,在所有正面最好,要创建一个数据库时报ora错,原来使用nfs安装oracle数据库,mount选项有特殊要求,如以下.以备查: R ...