摘要Silverlight 2 Beta 2发布之后,在原来的Beta 1基础之上有了很多的改变。本文总结一下Silverlight 2 Beta1 和Beta 2之间的变化,以及升级Silverlight 2.0 Beta 1应用程序到Beta 2过程中可能会遇到的一些问题。 1.卸载原有的与Beta 1有关的一切组件 2.安装Beta 2相关组件 3.在打开原有的项目后,会出现如下提示对话框,提示你是否要升级到最近版本。
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹控件变化控件放在System.Windows.dll程序集中原来在System.Windows.Controls.dll中的控件在Beta 2中都放在了System.Windows.dll中,这意味着这些控件都已经在Runtime中。如果在原来的程序中有如下代码,需要移除:
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹xmlns:my="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"并且需要修改对应命名空间下的控件声明,如:
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹<my:Button x:Name="myButton"/>在Beta 2中,经过这样的调整之后,可以极大的减小xap文件的体积。 Tooltip的变化在Silverlight Beta 2中已经不允许直接使用Tooltip了,只能通过ToolTipService来使用,另外移除了ToolTipService中的下面一些公有属性和方法: BetweenShowDelayProperty InitialShowDelayProperty ShowDurationProperty GetBetweenShowDelay GetInitialShowDelay GetShowDuration SetBetweenShowDelay SetInitialShowDelay GetToolTip SetShowDuration Beta 1中的ToolTipService实现大家可以参考Silverlight 2 Beta 1控件源代码。现在修改后的ToolTipService公开的API非常简单,如下代码所示:
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹public static class ToolTipService{
public static readonly DependencyProperty ToolTipProperty;
public static void SetToolTip(
DependencyObject element,
object value);}对于如何使用ToolTipService如下代码所示:
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹<Button ToolTipService.ToolTip="This is ToolTip text"/><Button Content="Button"> <ToolTipService.ToolTip> <TextBlock Text="text"/> </ToolTipService.ToolTip></Button>或者
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ToolTipService.SetToolTip(myElementNeedingAToolTip,
new TextBox());从控件中移除字体属性在Beta 2中,字体属性都放在了Control基类中,所以如果你在自定义控件时定义了自己的字体属性,需要进行修改,这些属性包括: FontFamily FontSize FontWeight FontStyle Foreground FontStretch 现在如果在父元素中定义了它们,子元素将会自动继承这些属性,如:
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹<UserControl x:Class="TerryLee.SilverlightBeta2Example.Page":ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ Width="400" Height="300":ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ FontSize="16":ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ FontFamily="Trebuchet MS">:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <Grid x:Name="LayoutRoot" Background="White">:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ ……:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ </Grid>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹</UserControl>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹DatePicker和CalendarDatePicker和Calendar控件的变化,如下所示:
Calendar [Remove] bool AreDatesInPastSelectable [Remove] Style DayStyle [Remove] Style MonthStyle [Remove] DateTime SelectableDateStart [Remove] DateTime SelectableDateEnd
DatePicker [Remove] bool AreDatesInPastSelectable [Remove] DateTime SelectableDateStart [Remove] DateTime SelectableDateEnd
Calendar和DatePicker [Remove] bool IsEnabled {get; set;} [Remove] DateTime DisplayDateStart {get; set;} [Remove] DateTime DisplayDateEnd {get; set;} [Add] DateTimeRange DisplayRange {get; set;} ButtonBase类变化在Beta 1中,ButtonBase是一个partial类:
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹public partial class ButtonBase :
ContentControl{
// ...... }
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹而在Beta 2中,它修改为了一个abstract类:
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹public abstract class ButtonBase :
ContentControl{
// ...... }
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹并且移除了internal的成员,这些成员包括: OnIsEnabledChanged OnGotFocus OnIsPressedChanged IsFocused IsMouseOver IsMouseOverProperty IsFocusedProperty OnKeyDown OnKeyUp OnLostFocus OnMouseEnter OnMouseLeave OnMouseLeftButtonDown OnMouseLeftButtonUp OnMouseMove 如果你曾经利用ButtonBase类开发过相关的控件,可能需要做一些修改。 TextBox控件变化在Beta 2中TextBox控件支持带换行的文本卷动,多行文字选择等功能。这一切,都源于TextBox控件内部模板的改变,Beta 1中TextBox控件模板如下:
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹<ControlTemplate xmlns='http://schemas.microsoft.com/client/2007':ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <Border x:Name='ELEMENT_Content'":ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ BorderThickness='{TemplateBinding BorderThickness}':ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ BorderBrush='{TemplateBinding BorderBrush}':ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ Background='{TemplateBinding Background}':ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ Padding='{TemplateBinding Padding}'/>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹</ControlTemplate>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹Beta 2中TextBox控件模板
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹<ControlTemplate xmlns='http://schemas.microsoft.com/client/2007' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'> <Grid x:Name='RootElement'>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <Grid.Resources>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <SolidColorBrush x:Key='Background' Color='#FF003255'/>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <SolidColorBrush x:Key='BorderBrush' Color='#FF000000'/>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <SolidColorBrush x:Key='AccentBrush' Color='#FFFFFFFF'/>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <LinearGradientBrush x:Key='FocusedStrokeBrush':ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ StartPoint='0.5,0' EndPoint='0.5,1'>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <GradientStop Color='#B2FFFFFF' Offset='0'/>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <GradientStop Color='#51FFFFFF' Offset='1'/>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <GradientStop Color='#66FFFFFF' Offset='0.325'/>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <GradientStop Color='#1EFFFFFF' Offset='0.325'/>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ </LinearGradientBrush>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <Storyboard x:Key='Normal State'>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <DoubleAnimation Storyboard.TargetName='FocusVisualElement':ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ Storyboard.TargetProperty='Opacity' To='0' Duration='0:0:0.0'/>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ </Storyboard>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <Storyboard x:Key='Focused State'>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <DoubleAnimation Storyboard.TargetName='FocusVisualElement':ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ Storyboard.TargetProperty='Opacity' To='1' Duration='0:0:0.0'/>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ </Storyboard>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ </Grid.Resources>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <Rectangle StrokeThickness='.5' RadiusX='2':ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ RadiusY='2' Fill='{TemplateBinding Background}'/>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <Rectangle StrokeThickness='.5' RadiusX='2' RadiusY='2':ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ Stroke='#FF003255'/>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <Border x:Name='ContentElement' Padding='{TemplateBinding Padding}'/>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <Grid x:Name='FocusVisualElement' Opacity='0' IsHitTestVisible='False'>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <Rectangle RadiusX='1' RadiusY='1' Margin='2':ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ Stroke='{StaticResource AccentBrush}' StrokeThickness='1'/>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <Rectangle RadiusX='1' RadiusY='1':ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ Stroke='{StaticResource Background}' StrokeThickness='2'/>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <Rectangle RadiusX='1' RadiusY='1':ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ Stroke='{StaticResource FocusedStrokeBrush}' StrokeThickness='2'/>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ </Grid>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ </Grid>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹</ControlTemplate>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹如果你在Beta 1中定义了TextBox的Style,需要进行一些修改,如ELEMENT_Content现在变为了ContentElement。 Image和ImageBrush变化Beta 2中移除了ExceptionRoutedEventHandler而采用泛型的EventHandler来实现,并且移除了DownloadProgress属性。 Beta 1:
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹// Image class::ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ public event ExceptionRoutedEventHandler ImageFailed;
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ public double DownloadProgress {
get;
set;}
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹// ImageBrush class::ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ public event ExceptionRoutedEventHandler ImageFailed;
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ public double DownloadProgress {
get;
set;}
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹Beta 2:
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹// Image class::ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ public event EventHandler<ExceptionRoutedEventArgs> ImageFailed;
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹// ImageBrush class::ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ public event EventHandler<ExceptionRoutedEventArgs> ImageFailed;Control
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹加上了边框属性在Beta 2中,Control基类提供了两个边框属性BorderBrush和BorderThickness,如果大家在Beta 1中自定义控件时定义了这两个属性,现在需要将其移除,并利用基类提供的属性。
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹public abstract class Control :
FrameworkElement{
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ public Brush BorderBrush {
get;
set; }
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ public Thickness BorderThickness {
get;
set; }
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹}
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ListBox变化在Beta 2中,ListBox移除了如下属性和事件:
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹SelectedItemsProperty
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹SelectionModeProperty
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹SelectedItems
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹SelectionMode
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹OnGotFocus(RoutedEventArgs)
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹OnItemContainerStyleChanged(Style, Style)
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹OnKeyDown(KeyEventArgs)
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹OnLostFocus(RoutedEventArgs)
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹OnSelectedItemsChanged(IList, IList)
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹OnIsSelectionActiveChanged(Boolean, Boolean)
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹OnSelectedIndexChanged(Int32, Int32)
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹OnSelectedItemChanged(Object, Object)
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹OnSelectionChanged(SelectionChangedEventArgs)
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹OnSelectionModeChanged(SelectionMode, SelectionMode)
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹对于ListBoxItem移除了如下属性和事件:
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹OnGotFocus(RoutedEventArgs)
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹OnLostFocus(RoutedEventArgs)
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹OnMouseEnter(MouseEventArgs)
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹OnMouseLeave(MouseEventArgs)
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹OnMouseLeftButtonDown(MouseButtonEventArgs)
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹IsMouseOver
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹同时移除了ListBox的选择模式枚举类SelectionMode,也就意味着在Beta 2中ListBox只能实现单选,除非自行做扩展。其实在Beta 1中SelectionMode也只有一个值Single,Beta 2中的ListBox提供了SelectedItem属性和SelectionChanged事件。 WatermarkedTextBox控件在Beta 1中加入的控件WatermarkedTextBox控件到了Beta 2中被移除,所以如果你在Beta 1的应用程序中使用了该控件需要用TextBox来替换。不过好在我们已经有了Beta 1中WatermarkedTextBox控件的源码,在Beta 2下重新实现一个也不是一件什么难事。 新的TabControl在Beta 2中添加了新的TabControl控件,但是该控件放在System.Windows.Controls.Extended程序集中,使用时需要添加命名空间。 DataGrid控件非常幸运的是如果我们在Beta 1的应用程序中使用了DataGrid控件,变化的地方并不多,而是新增了很多有用的功能。如实现排序等。 扩展控件程序集System.Windows.Controls.Extended仍然保留,其中包括了四个控件,在使用的时候需要对这些控件导入命名空间。 Calendar DatePicker GridSplitter TabControl 如:
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹<UserControl xmlns:my="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Extended":ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ x:Class="TerryLee.SilverlightBeta2Example.Page":ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ Width="400" Height="300":ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ FontSize="16":ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ FontFamily="Trebuchet MS">:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <Grid x:Name="LayoutRoot" Background="White">:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <my:DatePicker x:Name="myDatePicker"></my:DatePicker>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ <my:Calendar x:Name="myCalendar"></my:Calendar>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ </Grid>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹</UserControl>:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹Visual State Manager在Silverlight 2 Beta2中引进的一个新东西是"Visual State Manager(视觉状态管理器)" (VSM),该功能将极大地方便你建造交互性的控件模板。VSM引入了你可在控件模板中利用的2个基本概念:"视觉状态(Visual States)" 和 "状态迁移(State Transitions)"。例如,象按钮这样的控件为自己定义了多个视觉状态: "Normal(正常)", "MouseOver(鼠标之下)", "Pressed(按下)", "Disabled(不可用)", "Focused(获取焦点)", "Unfocused(不具焦点)"。在Blend中的模板编辑模式下,设计师现在可以轻松地编辑按钮在每个特定状态下的外观,以及设置迁移规则来控制从一个状态迁移到另一个状态时动画效果应该运行的时间。然后在运行时,Silverlight会动态地运行合适的动画故事板来把控件从一个状态平滑地过渡到另一个状态。(ScottGu)
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹网络通信WCF通信在Beta 2中,WCF现在支持双工通信服务了,但是仍然只支持basicHttpBinding绑定。这将促成一个非常干净的编程模型,允许服务器将消息“推送”到Silverlight客户端,而不用开发人员手工轮询服务器端的变动。这个编程模型在多种场景中都非常有用,包括即时消息/聊天应用,象股票行情和交易这样的监测/更新应用等。 WebClient和HttpWebRequestBeta 2中允许使用WebClient上传数据,以及允许我们在后台线程上调用WebClient或者HttpWebRequest,在异常处理上也需要做一些改动。 Beta 1
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹public void Download(){
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ WebClient client =
new WebClient();
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ client.DownloadStringCompleted +=
new DownloadStringCompletedEventHandler(
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ client_DownloadStringCompleted);
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ try:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ {
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ client.DownloadStringAsync(
new Uri(
http://Contoso.com/myfile.txt));
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ }
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ catch (SecurityException ex)
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ {
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ // handle synchronous exception:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ }
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹}
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹void client_DownloadStringCompleted(
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ object sender, DownloadStringCompletedEventArgs e){
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ // Set the text content of a control to the result:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ MyControl.Text = e.Result;}
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹Beta 2
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹public void Download(){
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ WebClient client =
new WebClient();
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ client.DownloadStringCompleted +=
new DownloadStringCompletedEventHandler(
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ client_DownloadStringCompleted);
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ client.DownloadStringAsync(
new Uri(
http://Contoso.com/myfile.txt));
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹}
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹void client_DownloadStringCompleted(
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ object sender, DownloadStringCompletedEventArgs e){
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ try:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ {
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ // Set the text content of a control to the result:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ MyControl.Text = e.Result;
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ }
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ catch (SecurityException ex)
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ {
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ // handle asynchronous exception:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ }
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹}
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹LINQ to JSON支持Beta 2中提供了LINQ to JSON的支持,允许你在Silverlight应用中轻松地查询,过滤,并将JSON结果映射到.NET对象上,这方便了对已经发布在网上的现有的AJAX端点和服务的调用和操作。 跨域SocketsBeta2现在允许跨域的HTTP和Sockets的networking支持(意味着你的应用可以调用不同于当前应用下载自的站点的网站)。 Silverlight会查看目标服务器上是否存在这样的XML策略文件,这文件表明了是否允许跨域网络访问。Silverlight支持一个我们开发的新XML策略文件格式,以及Flash策略文件(意味着可为Flash所用的现有的网站,不用费额外的功夫,就可在Silverlight中调用)。
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹浏览器集成HtmlPage变化Beta 1中HtmlPage提供了UnregisterScriptableObject方法,允许我们取消注册一个可被脚本访问的托管对象,Beta 2中已经移除了该方法,对于取消注册一个可在脚本中创建对象的类型方法UnregisterCreateableType仍然保留。 HtmlElement变化Beta 1中可以使用HtmlElement.GetProperty和HtmlElement.GetAttribute方法来互相访问HTML DOM的Property或者Attribute,Beta 2已经取消了这一行为,只能使用HtmlElement.GetProperty方法来访问HTML DOM的Propery,而只能使用HtmlElement.GetAttribute来访问HTML DOM的Attribute。
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹隔离存储隔离存储空间大小IsolatedStorage是Beta 1中提供的非常有用的新特性,在Beta 2中存储的大小增加到了1M; 增加空间方法更名Beta 2中隔离存储请求增加空间的方法名由TryIncreaseQuotaTo()变化为了IncreaseQuotaTo(),微软解释此举是因为该方法虽然加了Try,但仍然没有使用Try Pattern,所以移除比较合适。
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹Beta 1:
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹IsolatedStorageFile storage =
IsolatedStorageFile.GetUserStoreForApplication();
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹storage.TryIncreaseQuotaTo(maxSize);
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹Beta 2:
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹IsolatedStorageFile storage =
IsolatedStorageFile.GetUserStoreForApplication();
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹storage.IncreaseQuotaTo(maxSize);
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹新增按Site存储在Beta 1下隔离存储只能按照应用程序存储,Beta 2中增加按照站点存储:
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹Beta 2:
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹IsolatedStorageFile storage;storage =
IsolatedStorageFile.GetUserStoreForApplication();
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹storage =
IsolatedStorageFile.GetUserStoreForSite();
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹应用程序配置更名应用程序设置ApplicationSettings类更名为IsolatedStorageSettings,且sealed类。
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹Beta 1:
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹ApplicationSettings settings = ApplicationSettings.Default;settings.Add(
"myKey", myValue);
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹settings.Save();
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹Beta 2
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹IsolatedStorageSettings settings =
IsolatedStorageSettings.ApplicationSettings;
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹settings.Add(
"myKey", myValue);settings.Save();
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹IsolatedStorageSettings settings =
IsolatedStorageSettings.SiteSettings;settings.Add(
"myKey", myValue);
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹settings.Save();
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹OpenFileDialog变化Beta 1中OpenFileDialog.ShowDialog方法的返回值为DialogResult,Beta 2中返回变成了bool类型。
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹其它APISetValue方法在Beta 2中,SetValue方法只能设置依赖属性类型的,而不会像在Beta 1中自动进行转换。如:
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹Beta 1
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹myButton.SetValue(
Canvas.LeftProperty, 100);
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹Beta 2
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹object left = 100;myButton.SetValue(
Canvas.LeftProperty, left);
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹当然本文总结还只是其中的一部分,更为详细的变化大家可以参考MSDN:
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹http://msdn.microsoft.com/en-us/library/cc645049(VS.95).aspx:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹顺便说一句:Silverlight 2 Beta 2中文版的开发包已经发布,以前使用中文Visual Studio 2008安装不上的朋友这下可以放心了:)
:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=50a9ec01-267b-4521-b7d7-c0dba8866434:ÁAî%÷îÌwww.netcsharp.cn«1IècQ¹