初学Silverlight,记录下自己的成长,也与大家一起分享。
欢迎多多来做客~
刚开始写博客,不妥之处请多多指正@:)
您的支持和回复是我最大的动力
环境:Win 2003 server SP2 , Silverlight 4.0 ,IE7.0
浏览器外运行(Out Of Browser),从Silverlight 3.0 版本开始支持,添加了可以脱离浏览器运行的功能。
将程序下载到本地运行,通过快捷方式打开Silverlight程序,so cool!
具体实现也非常容易,本文核心部分在于解决浏览器外运行的应用程序更新问题,即当用户下载到本地后,服务器发布了新版本,如何支持自动更新。
首先,新建Silverlight应用程序,命名为OutOfBrowser,默认创建承载应用程序的网站名称为OutOfBrowser.Web.如下图所示,点击确定。
创建的解决方案默认情况:
打开MainPage.xaml文件,新增一个TextBlock控件,Text属性修改为“君不见黄河之水天上来”:
<UserControl x:Class="OutOfBrowser.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="White">
<TextBlock Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="textBlock1" Text="君不见黄河之水天上来" VerticalAlignment="Top" />
</Grid>
</UserControl>
右键点击OutOfBrowser项目,选择“属性”,在Silverlight选项卡中,选中“允许在浏览器外运行程序”:
生成OutOfBrowser项目,在OutOfBrowser.Web项目的ClientBin目录下,自动加载了OutOfBrowser.xap文件。此时在OutOfBrowser.Web中右键点击OutOfBrowserTestPage.aspx页面,选择“在浏览器中查看”,页面显示“君不见黄河之水天上来”。右键点击页面,选择“将OutOfBrowser应用程序安装到此计算机”,可以选中在开始菜单及桌面上添加快捷方式。安装后,自动打开页面,展示内容相同。
关闭网页和弹出的应用程序。修改MainPage.xaml文件中的文本框内容,增加一句话:“奔流到海不复回”,生成项目,浏览网页,页面显示更新后的内容:“君不见黄河之水天上来,奔流到海不复回”。运行桌面版的应用程序,仍然显示原内容:“君不见黄河之水天上来”。问题出现,如何在程序安装到桌面后,自动更新新版本?
下面来解决这个问题。
打开OutOfBrowser项目中App.xaml.cs,在public App()函数中,添加更新事件:
public App()
{
this.Startup += this.Application_Startup;
this.Exit += this.Application_Exit;
this.UnhandledException += this.Application_UnhandledException;
//检查更新
this.CheckAndDownloadUpdateCompleted += new CheckAndDownloadUpdateCompletedEventHandler(App_CheckAndDownloadUpdateCompleted);
this.CheckAndDownloadUpdateAsync();
InitializeComponent();
}
CheckAndDownloadUpdateAsync方法以异步方式检查更新(如果需要,则下载最新版本)
当应用程序已经完成更新检查并下载完成后,将触发CheckAndDownloadUpdateCompleted事件。
我们在此实现App_CheckAndDownloadUpdateCompleted方法:
//检查更新并下载完毕
void App_CheckAndDownloadUpdateCompleted(object sender, CheckAndDownloadUpdateCompletedEventArgs e)
{
//throw new NotImplementedException();
if (e.UpdateAvailable)
{
MessageBox.Show("发现新版本的Silverlight应用程序" +
",请重新启用您的应用程序!");
}
else if (e.Error != null &&
e.Error is PlatformNotSupportedException)
{
MessageBox.Show("发现新版本Silverlight应用程序," +
"但是不能运行在您的Silverlight版本中,请访问程序主页更新。");
}
else
{
MessageBox.Show("没有新版本应用程序需要更新!");
}
}
编译应用程序,并运行。在页面上点击右键,删除应用程序,然后重新安装。安装完毕后,自动打开桌面版应用程序,并弹出提示信息“没有新版本应用程序需要更新!”。说明检查更新的功能已经调用。下面测试是否正常运行。
再次修改MainPage.xaml文件中的文本框内容,增加一句话:“君不见高堂明镜悲白发,朝如青丝暮成雪”,生成项目,浏览网页,页面显示更新后的内容:“君不见黄河之水天上来,奔流到海不复回.君不见高堂明镜悲白发,朝如青丝暮成雪.”。
运行桌面版的应用程序,提示有新版本需要更新,更新后,提示用户重新启动。关闭应用程序,重新启动,提示没有新版本,说明已经更新,再看内容,也是最新的版本。程序按照我们的逻辑正常运行并生效。
这种提示方式旨在验证更新的机制,大家可以根据实际需要进行修改和拓展。
暂时不晓得如何上传源码,有需要的朋友可以留下邮箱地址。
其实貌似已经够详细了~