neuhawk

博客园 首页 新随笔 联系 订阅 管理
 从Mike Harsh's Blog : Silverlight v1.0 RC is Almost Here 得知Silverlight RC即将发布.
可以从http://folders.live.com/self.aspx/kocj18oD+kQ/Silverlight/Silverlight%201.0%20SDK%20RC%20Preview.zip下载RC SDK

Silverlight 1.0 RC Enhancements

  • New "root" property on Content. Enables access to the root element of the XAML DOM.
  • New “Tag” property on UIElement Enables user storage on every Silverlight UIElement.
  • New MediaElement APIs for selecting different audio streams out of a file with multiple audio tracks. See the AudioSteamCount and AudioStreamIndex properties.
  • Improved media performance: optimized assembly instructions for the video decode.
  • Media script commands encoded in a separate stream in the video file will now raise the MediaElement’s MarkerReached event


 

Breaking Changes

Remove "javascript:" in event handlers

The first example shows attaching an event handler in Beta and the second example shows how to do it in RC.

For Silverlight Beta:

XAML

 
<canvas onMouseLeftButtonDown="javascript:myhandler"  /> 

For Silverlight RC:

XAML

 
<canvas onMouseLeftButtonDown="myhandler" />  

Remove "Sys."

Remove "Sys." from namespaces in your code. For example, the beta code below:

JavaScript

 
Sys.Silverlight.createObject(....)   

Needs to be changed to:

JavaScript

 
Silverlight.createObject(....)   

Use the latest Silverlight.js

Please make sure you use the latest Silverlight.js provided to you in your applications. A few changes have been made to this file. The plug-in has been renamed from “WPFe Plug-In” to “Silverlight Plug-In”. This plug-in is referred to in Silverlight.js file to detect Silverlight on the system. Also the MIME type of the plugin was changed from application/ag-plugin to application/x-silverlight. Finally, the namespace "Sys." was removed. Make sure all instances of "Sys." are pulled from your applications.

All Downloads are now Asynchronous

Due to difficulties in providing reliable synchronous downloads across all platforms, we’ve removed this feature from our downloader API. Consequently, we have removed the 3rd parameter on the download open API as is was no longer needed. You must update open calls to remove this parameter.

Once you have the version, you can write code that adds the extra argument to the downloader open method only when using 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 is Resolved Asynchronously

When processing the XAML the font specified by the Glyphs FontUri attribute is downloaded separately – asynchronously. This means that text displayed via the Glyphs element will appear once the font is downloaded – in most cases after other content has already appeared.

In 1.0 there is no event for Glyphs downloading progress when using the FontUri. To work around this you could use the Downloader object to first request the font file (and thus using the Downloader's progress events to know when it is downloaded).

Once the Downloader has finished downloading the font you can then create a Glyphs element with the FontUri specifying the exact same URI. Since the font is already downloaded it would not be downloaded again and the Glyphs element should render almost instantaneously.

NOTE: This does make an assumption that the font downloaded will remain in the browser's cache (no guarantees since this is user/browser specific) and will be picked up when the Glyphs element attempts to download the same file.

Remove Visibility.Hidden

In order to reduce surface area, we removed Visibility.Hidden from the product. Prior to this change Visibility.Hidden behaved the same as Visibility.Collapsed. From the functionality stand-point, the Silverlight behavior is closer to the WPF Visibility.Collapsed hence we kept Collapsed. To create content that will work consistently between Beta and 1.0, replace all occurrences of "Hidden" in both XAML and script with "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">

Extra check on ASX Tags Resulting in MediaFailed Event

There are a set of ASX tags we previously silently ignored that we now result in a MediaFailed event. These tags are: PREVIEWMODE, BANNERBAR, PARAM, REPEAT, STARTMARKER, ENDMARKER and some 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.

New Parser Error on Invalid Double Values like "Auto"

We report a greater number of parser errors in Silverlight 1.0 RTM. The applications will break in cases where the developer set a numeric property to an invalid value. The Beta bits treat the invalid value as “0” where as RTM throws an error. The following is an example:

XAML

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

“Auto” is not supported in Silverlight 1.0. In Beta bits the above caused the Width to be set to 0. Given that we do not clip TextBlock by Width, this did not impact the application behavior. This, however, will generate a parser error in V1.0 RC.

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

We’ve changed OnLoad, OnError, OnResize and OnFullScreenChange to be function-pointer based rather than string based. In order to develop Silverlight content that works on both 1.0 Beta and RC bits, you need to check the version and develop the application code accordingly. The following is an example using OnResize:

XAML

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

Elements in <*.Resource> blocks must be named

Elements in <*.Resource> blocks must be named. This means you have to have an x:Name property for all content in a <*.Resources> section. For example:

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>
 

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

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;

Additional Animation Run-Time Errors

Silverlight 1.0 RTM is stricter than Beta in throwing run-time errors for functionality not supported. Examples of such errors are:

  • Storyboard.TargetProperty must be defined on all animations by the time they are begun. Storyboard.TargetName must either be specified on animations themselves or on a parent Storyboard by the time they are begun.
  • Certain Storyboard/Animations properties can only be modified when the Storyboard is stopped. These properties are Storyboard.TargetName and Storyboard.TargetProperty.

Can No Longer Use ’\’ in URIs

We changed this behavior in order to maintain the cross platform support of Silverlight applications. All web resources should be renamed if they include a "\". For example, use "./assets/images/bg.jpg" instead of ".\assets\images\bg.jpg”

All Shaped Transform Members are now of Type Transform instead of TransformGroup

We did this change to be consistent across Silverlight and with WPF. An example of this change is that in RTM brush.relativeTransform.toString() would return "Transform" rather than "TransformGroup".

Remove IsFilled Property

We no longer support the IsFilled property on PathFigure. Developers should remove it from their application code.

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

If you intend to remove event handlers during your Silverlight application lifetime, you must change the syntax by which you add the event handlers, and retain a token that is now necessary for the removeEventListener call. The token differentiates for cases where multiple handlers were attached for the same event. If you do not intend to remove event handlers, you can leave your addEventListener calls alone, although you should note that addEventHandler now also supports adding the handlers by reference rather than by a quoted name string. This change was made in order to give the Silverlight event object model better resemblance to other scripting object model syntaxes for adding events.

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);

Replace Version Property in Plug-in with isVersionSupported Method

The change is to remove the version property from the plug-in and add a new isVersionSupported method. This method takes a version string (eg. “1.0” or “1.1”) and returns a boolean indicating whether the plug-in is compatible with the requested version.

posted on 2007-07-18 11:30  neuhawk  阅读(1206)  评论(1编辑  收藏  举报