您的位置:首页 > 其它

关于SilverLight1.0 Beta 和 最新发布的RC两个版本之间的差别

2007-09-03 09:30 1131 查看

关于SliverLight 1.0 Beta 和 最新发布的RC两个版本之间的差别

摘自http://silverlight.cn/blogs/jshao/archive/2007/07/31/beta-rc.aspx

本篇文档提供一个清单,包含自从 Silverlight 1.0 Beta 发布 (MIX release May 2007)以来的版本升级所带来的新特性, 功能改变或者功能增强. 在本文档中也会提供一个 "breaking changes" 的列表,对于这些重要改变,你可能需要马上就要更改到你的程序中去,只有这样你的Silverlight 1.0 Beta 程序才可以过渡到RC release.

Note: 另外一个查看breaking changes请点击 这里.
本篇的话题包括以下:

Silverlight 1.0 RC增强特性

Breaking Changes

在event handlers中移除 "BLOCKED SCRIPT"

移除 "Sys."

请使用最新的 Silverlight.js文件

现在所有的 Downloads 都是异步执行的了

Glyph element FontURI现在已经是异步解析了

移除Visibility.Hidden

给一些额外的ASX Tags 增加了检测机制,现在引发异常将引发MediaFailed Event

一个新的 Parser Error 引入,它将在给一些Double Values赋无效值的时候引发,比如赋值为 "Auto"

OnLoad, OnError, OnResize, OnFullScreenChange 现在更改为基于函数的,而不是以前基于字符串的

<*.Resource> blocks中的Elements 必须给予命名

The MediaElement Position property value can be greater than the MediaElement NaturalDuration property value

额外的 Animation Run-Time Errors

不再在 URIs中使用 ’/’

所有的 Shaped Transform 成员现在都变为Transform类型,而不是以前的TransformGroup类型

移除IsFilled 属性

AddEventListener 现在返回一个标识,你可以将此标识传送到removeEventListener来移除某些 Event Handlers

替换 <control>.settings.version 属性为isVersionSupported 方法

更改 enableHtmlAccess: true 为 enableHtmlAccess: "true"




Silverlight 1.0 RC增强特性

增添了新的 "root" 属性. 这样可以访问XAML DOM的根元素了.

新增 UIElement“Tag” 属性 . 使用户可以在每个Silverlight UIElement中存储.

New MediaElement APIs for selecting different audio streams out of a file with multiple audio tracks. See the AudioStreamCount and AudioStreamIndex properties.

提高了 media 性能: 优化了video decode的assembly指令 .

Media script commands encoded in a separate stream in the video file will now raise the MediaElement’s MarkerReached event



Breaking Changes

接下来的清单列举了一些Silverlight 1.0 RC 到 Silverlight 1.0 Beta (Mix build)的breaking changes . 如果你曾经创建了 Beta的应用程序 (MIX build), 那么请你以此清单为准来更新你的应用程序. 最后你的程序应该能在 Beta 和 RTM 版本中都能正常运行.

在event handlers中移除 "BLOCKED SCRIPT"

第一个示例演示在Beta版中关联一个event handler,第二则是现在RC中的做法.

For Silverlight Beta:

XAML
<canvas onMouseLeftButtonDown="BLOCKED SCRIPTmyhandler"  />

For Silverlight RC:

XAML
<canvas onMouseLeftButtonDown="myhandler" />

移除 "Sys."

在你的代码的命名空间中移除 "Sys." . 如示例, beta 中的代码如下:

使用最新的 Silverlight.js

请确保使用最新的 Silverlight.js 到你的应用程序中. 该文件中的内容已经有了一些改变. plug-in 申明已经从 “WPFe Plug-In” 变成了 “Silverlight Plug-In”. 这个plug-in与Silverlight.js 文件中来检测用户系统中的 Silverlight有关. 同样plugin 的MIME 类型已经从application/ag-plugin 改变成 application/x-silverlight. 最终, 命名空间"Sys." 被移除. 请确保所有的 "Sys."实例都已经从应用程序中移除.

所有的Downloads 现在都是异步的了

因为我们发现对于跨平台而要创建一个稳定的同步下载是很困难的事,所以我们从 downloader API中移除了这个控制是否同步下载的参数. 因此,你需要在open方法中移除第三个参数.

对于下面这种情况,你也可以保留这个参数,但确保使用了 Mix bits:

JavaScript
function download(host, file) {
  var dl = host.createObject("downloader");
  dl.addEventListener("completed", downloadComplete);
  // If Beta version add the extra argument
  if (_mix) {
    dl.open("get", file, true);
  } else {
    dl.open("get", file);
  }
  dl.send();
}

Glyph element FontURI 现在已经是异步解析了

当处理XAML中的 Glyphs FontUri 属性时,该属性对应的 font将会异步下载,这意味着当这个字体下载完时,它对应的内容才会马上显示出来 – 在大多数情况下,它将在其它一般内容都显示完后才会显示出来.

在 1.0中, 当使用FontUri的,这是没有一个事件可以来控制 Glyphs downloading progress 的 . 想要处理好这种状况,你可以使用 Downloader object来对字段文件进行请求 (这样样你使用 Downloader的 progress 事件来得知什么时候衩下载完了).

一旦 Downloader 完成了字体下载,你可以创建 Glyphs element 的 FontUri 指向URI. 只要字体下载完毕,以后就不用再下载了,Glyphs element 会以很快的速度加载已经下载完成的字体了.

NOTE: 你可以假想成字体文件已经存在于 browser的 cache 中了(但不保证对于一些特定的浏览器和浏览者) 而当 Glyphs element 试图进行下载时,它将马上替代下载过程.

移除 Visibility.Hidden

为了 简化UI区域, 我们移除了 Visibility.Hidden . 之前Visibility.Hidden 与 Visibility.Collapsed是一样的. 从功能性观点来看, Silverlight 表现已经接近WPF .因此我们保留了 Collapsed. 想要保持内容都在Beta 和 1.0中正常显示, 请替换所有XAML 和 script "中的Hidden" 为 "Collapsed".

For JavaScript, the following Beta code:

JavaScript
sender.findName("fsm").visibility = "Hidden";

Needs to be changed to:

JavaScript
sender.findName("fsm").visibility = "Collapsed";

And for XAML, the following Beta code:

XAML
<Canvas x:Name="mask" Visibility="Hidden">

Needs to be changed to:

XAML
<Canvas x:Name="mask" Visibility="Collapsed">

给一些额外的ASX Tags 增加了检测机制,现在引发异常将引发MediaFailed Event

这有一些 ASX tags 是被我们以前所忽略的,现在它们将引发 MediaFailed event. 这些 tags 是: PREVIEWMODE, BANNERBAR, PARAM, REPEAT, STARTMARKER, ENDMARKER 和一些 MOREINFO tags. Also if a REF URL fails to open, SL does not fall back to other REFs in the same ENTRY. Instead, we will raise a MediaFailed event.

一个新的 Parser Error 引入,它将在给一些Double Values赋无效值的时候引发,比如赋值为 "Auto"

我们加入了很多 parser errors 到 Silverlight 1.0 RTM. 当开发人员将一个枚举量赋给一个不相关的属性时,程序将报错. 在 Beta 中将无效的数据认为是 “0” 而 RTM将抛出一个 error.示例如下:

XAML
<TextBlock Width="Auto" Text="Created By:" />

“Auto” Silverlight 1.0中是不支持的. 在Beta中将导致 Width 值设置为 0. Given that we do not clip TextBlock by Width, this did not impact the application behavior. 然而,这样的话在V1.0 RC中将引发一个parse错误.

OnLoad, OnError, OnResize, OnFullScreenChange are now Function Pointer Based Rather than String Based

我们将 OnLoad, OnError, OnResize 和 OnFullScreenChange 改变为基于 function-pointer 而不是以前的基于string 的. 想要开发 Silverlight 内容使其在 1.0 Beta 和 RC bits, 你需要对silverlight的版本进行判断. 下面是OnResize的示例(事件处理程序已经由string变化函数了):

XAML
if (Silverlight.checkVersion(_ag, "20416")) {
  // Beta code path – use strings
  _ag.content.onResize = "BLOCKED SCRIPTonResize";
  ag.content.onFullScreenChange = "onFullScreenChanged";
} else {
  // RC code path – use function pointers
  _ag.content.onResize = onResize;
  _ag.content.onFullScreenChange = onFullScreenChanged;
}

<*.Resource> blocks中的Elements 必须给予命名

<*.Resource> blocks中的Elements 必须给予命名.这意味着你可以对所有<*.Resources> section中的内容给予一个 x:Name 属性 . 如下:

Silverlight Beta:

XAML
<Canvas.Resources>
<Storyboard>
    		<!-- Content here... -->
  	</Storyboard>
 </Canvas.Resources>

Silverlight RC:

XAML
<Canvas.Resources>
 	 <Storyboard x:Name="name">
      		<!-- Content here... -->
   	</Storyboard>
 </Canvas.Resources>

MediaElement Position 属性值现在可能会比 MediaElement NaturalDuration 属性值大

This will mostly be seen in broadcast cases where previously we returned 0 for the "Position" value but now we return the play time. Also developers creating transport controls should be aware of this and the need to clip the media if necessary. For example:

Silverlight Beta:

JavaScript
// set the slider thumb position in the right range of the track’s width
// assumes position is never greater than media’s naturalDuration
sliderThumb[“Canvas.Left”] = (myME.position.seconds/myME.naturalDuration.seconds)*sliderTrack.width;

Silverlight RC:

JavaScript
// need to clip the slider position by the track’s width
if (myME.position.seconds >= myME.naturalDuration.seconds)
  	sliderThumb[“Canvas.Left”] = sliderTrack.width;
else
sliderThumb[“Canvas.Left”] = (myME.position.seconds/myME.naturalDuration.seconds)*sliderTrack.width;

额外的 Animation Run-Time Errors

Silverlight 1.0 RTM 对于 Beta在抛出run-time errors方面要严格许多. 示例如下:

Storyboard.TargetProperty 对于任何 animations 开始前都必须进行定义. Storyboard.TargetName must either be specified on animations themselves or on a parent Storyboard by the time they are begun.

某些 Storyboard/Animations 属性只有在Storyboard 停止后才能进行设置更改. 这些属性是Storyboard.TargetName 和 Storyboard.TargetProperty.

不再在URIs中使用 ’/’

我们对此进行改变是为了更一步支持Silverlight 应用程序的跨平台功能.所有的 web resources 应该进行更改,只要它们包含 "/". 比如, use "./assets/images/bg.jpg" 代替 "./assets/images/bg.jpg”

所有的Shaped Transform 成员现在都是 Transform 类型,而不是以前的 TransformGroup

此处改变是为了保持 Silverlight 和 WPF的一致性. 这个例子可以用这个来说明,在 RTM brush.relativeTransform.toString() 将返回一个 "Transform" 类型而不是 "TransformGroup".

移除 IsFilled 属性

不再支持PathFigure的 IsFilled属性 . 你应该从程序中移除这个属性.

Silverlight Beta:

XAML
<PathFigure IsFilled="true" .../>

Silverlight RC:

XAML
<PathFigure .../>

AddEventListener now Returns a Token to be Passed to removeEventListener to Un-Register Event Handlers

如果你想在Silverlight application的生存时间内移除event handlers, 你需要使用与添加 event handlers不一样的语法来达到目的, removeEventListener 调用需要一个保留的token . 这个 token 是用来区分同一个事件关联的多个 handlers. 如果你并不想移除event handlers, 那你就把 addEventListener 调用扔到一边,不用管就行了. 这个改变是为了使用silverlight event 对象模型在添加事件上更像其它的 scripting 对象模型语法 .

For JavaScript, the following Beta code:

JavaScript
myObj.addEventListener(“MouseEnter”, myEnterHandler);
myObj.removeEventListener(“MouseEnter”, myEnterHandler);

Needs to be changed to:

JavaScript
var enterToken = myObj.addEventListener(“MouseEnter”, myEnterHandler);
myObj.removeEventListener(“MouseEnter”, enterToken);

And for XAML, the following Beta code:

XAML
<... x:Name=”myObj” MouseEnter=”myEnterHandler”/>

JavaScript
sender.FindName(“myObj”).removeEventListener(“MouseEnter”, myEnterHandler);

Needs to be changed to:

XAML
<... x:Name=”myObj” MouseEnter=”myEnterHandler”/>

JavaScript
sender.FindName(“myObj”).removeEventListener(“MouseEnter”, 0);

替换 <control>.settings.version 属性为 isVersionSupported Method

这个改变是移除object tag中的<control>.settings.version 属性,然后使用新的 isVersionSupported 方法来代替. 这个方法需要一个版本字符串参数 (eg. “1.0” or “1.1”) 然后用一个布尔来确定当前plugin版本是否和当前请求匹配.

改变 enableHtmlAccess: true 为 enableHtmlAccess: "true"

给 enableHtmlAccess的值添加了一个双引号. For example:

JavaScript
enableHtmlAccess: true

Needs to be changed to:

JavaScript
enableHtmlAccess: "true"

JavaScript
Sys.Silverlight.createObject(....)

应该改成这样:

JavaScript
Silverlight.createObject(....)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: