详解Silverlight和WPF互相扩展

1.更适合WPF或Silverlight的场景

WPF被设计为创建Windows桌面应用程序,具有 访问富用户界面特征,如动画、3D图形、音频和视频,以及直接访问图 形加速硬件以实现更 好的图形性能。由于大部分WPF应用程序是在计算机本地运行,因此不会涉及到象Web应用程 序那样 的安全限制,因此,如果对文件系统有访问限制的话,WPF应用程序可以只在用户计 算机上存储少量的数据,同样,由于 应用程序不用从远程计算机上下载,这非常适合 Microsoft .NET Framework,可以不用包括创建它时的所有完整特性。

Silverlight 被设计为比WPF更广阔的扩展,因为它支持多平台,截至目前,它不仅 支持Windows,还支持Mac,Novel 和Linux(Moonlight – 目前和Silverlight  1.0 相当,等价于Silverlight  2.0的版本目前也正在开发中 )。

然而,为了实现这个 伟大的目标,Silverlight 必须要能够在各种浏览器及不同操作系统环境下能够运行,这需 要在 Silverlight 上增加一些结构性限制,因为在不同系统下对硬件驱动的方式可能不一样 ,如Windows下的Direct X和 Windows显示驱动模型,它们在Mac和Linux上就没有。

接下来就是Silverlight 在浏览器中的插件的大小了,微软被要求省略掉.NET Framework中许多特性,否则插件过大 ,其中很多特性又不常用,对用户而言用处不大,这 会影响用户的下载积极性,正是由于这个限制,Silverlight 短期 内还做不到WPF那么丰富 的功能。

在选择哪种技术更适合项目时,如果考虑图形加速,或那些只有WPF中才有 的特性,或者对性能要求很高时,那选择 WPF是最恰当的,相反,如果你对性能要求不是太 高,同时又想将应用扩展到Mac和Linux平台时,那只有选择 Silverlight 了。

2.既适合WPF又适合Silverlight的场景

最开始在WPF下开发的Windows客户端应用程序可能会扩展到Mac或Linux平台上运行,例如 ,当WPF引入时,我创建了 一个XBAP应用程序(XAML浏览器应用程序),它包括了我2006年 在塞内加尔旅游时拍摄的照片,不幸的是,由于我们的 朋友没有安装.NET Framework,因此 在它的电脑上不能看到这些照片,通过将这个程序转换成Silverlight,我的朋友或 那些不 想安装.NET Framework的人都可以轻松看到这些照片了。

在Mike Tucker的博客站点上有一篇很有趣的文章,讲的是最初是由Silverlight 创建应 用程序,然后又转换到WPF应 用程序的例子,Tucker在寻找一种方法来调整它的Silverlight 程序性能,但他没有找到这样的工具,于是决定创建一 个等价的WPF程序。

Caliburn是一个应用程序框架,它被设计用来帮助开发人员实现不同的模型,如MVC,MVP ,Presentation模型(MVVM ),命令和应用程序控制器就是一个同时使用了Silverlight 和 WPF开发的程序示例,与此类似,开发人员也想使用这两 种技术创建自己定制的控制器。

3.WPF和Silverlight 特性对比

由于Silverlight 是WPF的一个大子集,Silverlight 有些特性WPF没有,而且它们共同的 技术特性其实现形式也有所 不同,Vertigo Software的Christopher Vigna允许我们使用下 面的简图来说明这一点。

图- 1 WPF和Silverlight 对比图(2009年二月)

特性集包括依赖属性、风格和可视化树是两者共同的特性,但实现方式却不一样

网络上不缺乏对这两种技术进行对比的博客文章和论坛讨论主题,但由于这两个技术都处 于不停的发展阶段,因此, 如果从博客文章去收集整理它们之间的不同之处显得非常不可靠 ,因为你看到的博客文章可能已经过时了,如果非要说 的话,那MSDN在线帮助文件可能要算 最权威的了,但它也有过期的那一天,尽管如此,它在检查WPF和Silverlight 当前 的不同 之处时还是非常有用的,它不仅说明了在编程时如何处理它们,还对未来这两者之间可能合 并的功能进行了阐述 。

时间: 2024-10-25 10:27:34

详解Silverlight和WPF互相扩展的相关文章

详解Window7 下开发php扩展_php实例

一.首先查看phpinfo() 信息 PHP Version 5.4.34 Zend Extension Build API220100525,TS,VC9 PHP Extension Build API20100525,TS,VC9 Thread Safety enable 线程安全,VC9编译,5.4.34版本 二.开发前准备工作 php 5.3-5.4 :Visual C++ 9.0(Visual Studio 2008) 安装Cygwin(下载地址:http://www.cygwin.c

详解Silverlight 2中的独立存储(Isolated Storage)

id.dat记录了当前应用程序的ID quota.dat记录了当前应用程序独立存储的配额,即存储空间大小 used.dat记录已经使用的空间 在另一个s文件夹下可以找到我们创建的目录以及文件,并且可以打开文件来看到存储的内容,如下图所示: 禁用独立存储 现在我们来思考一个问题,既然独立存储是一个与Cookie机制类似的局部信任机制,我们是否也可以禁用独立存储呢?答案自然是肯定的.在Silverlight应用程序上点击右键时,选择Silverlight Configuration菜单,将会看到如下

详解Silverlight中的Downloader对象

Silverlight中有一个Downloader对象,可以用来下载Silverlight应用程序中相应的文件,比如脚本 .媒体文件等等.有了它就可以根据应用程序的具体需要来下载相应的文件,而不必在Silverlight插件 初始化的时候就将整个应用程序所需要的文件全部下载下来.这样不仅可以节省用户下载应用程序所花费 的等待时间,还可以直接在应用程序中动态使用下载下来的内容而无需刷新整个页面. Downloader对象能够初始化数据传输,监视数据传输的进程,并能很方便的得到所下载的文件.加载 应

详解JS中Array对象扩展与String对象扩展_javascript技巧

废话不多说了,直接给大家上array对象扩展代码了,具体代码如下所示: /** * Created by laixiangran on 2016/01/07. * Array扩展 */ (function() { // 遍历数组 if (typeof Array.prototype.forEach != "function") { Array.prototype.forEach = function (fn, context) { for (var i = 0; i < this

dos 环境变量延迟扩展enabledelayedexpansion详解_DOS/BAT

一,什么是延迟环境变量扩展? 延迟变量全称"延迟环境变量扩展",要理解这个东西,我们还得先理解一下什么叫变量扩展!   CMD在解释我们的命令的时候,首先会读取一条完整的命令,然后对其进行一些命令格式的匹配操作,看你所输入的 命令格式是不是符合它的要求.如果我们要在命令中引用一些变量,那么我们如何让CMD在解释我们的命令时,能识别 出这个变量呢?这时我们就可以在变量名字两边加一个%号,如%name%.当CMD在读取我们的整条命令进行格式匹配的时 候,就会发现name这个字符两边加了%号

最锋利的Visual Studio Web开发工具扩展:Web Essentials详解

原文:最锋利的Visual Studio Web开发工具扩展:Web Essentials详解  Web Essentials是目前为止见过的最好用的VS扩展工具了,具体功能请待我一一道来.   首先,从Extension Manager里安装:最新版本是19号发布的2.5版 然后重启你的VS开发环境,就可以使用它提供的方便功能了. Web Essentials对CSS.JavaScript和HTML都提供了很多快捷的功能支持,具体列表如下: CSS 即时预览Live Web Preview每次

Android对sdcard扩展卡文件操作实例详解_Android

Android对sdcard扩展卡文件的操作其实就是普通的文件操作,但是仍然有些地方需要注意.比如: 1.加入sdcard操作权限: 2.确认sdcard的存在: 3.不能直接在非sdcard的根目录创建文件,而是需要先创建目录,再创建文件: 实例如下: (1)在AndroidManifest.xml添加sdcard操作权限 <!-- sdcard权限 --> <uses-permission android:name="android.permission.WRITE_EXT

PHP扩展CURL的用法详解_php实例

实现的功能: 1.实现远程获取和采集内容 2.实现PHP 网页版的FTP上传下载 3.实现模拟登陆:去一个邮件系统,curl可以模拟cookies 4.实现接口对接(API),数据传输等:通过一个平台发送短信啊,抓取和传递所传输的信息. 5.实现模拟Cookie等:登陆的状态下才可以操作一些属性. 如何使用CURL功能: 默认情况加PHP是不支持CURL的,需要在php.ini中开启该功能 ;extension=php_curl.dll前面的分号去掉 1  整个操作过程中第一步是用cur_ini

CodeIgniter扩展核心类实例详解_php实例

本文实例讲述了CodeIgniter扩展核心类的方法.分享给大家供大家参考,具体如下: CI中对核心类.辅助类和函数的扩展是相当方便的,配置文件中指定了subclass_prefix扩展前缀,默认为MY_,扩展时需要以该配置为前缀,下面整理下扩展方式. 1.扩展核心类 核心类位于system/core下,其中大部分类会在初始化的时候自动加载.扩展核心类的方式有两种:替换核心类和继承核心类. 替换核心类 当application/core目录下存在与system/core同名的文件时会自动替换掉核