如何自定义silverlight的加载页面

如何自定义silverlight的加载页面,第1张

概述通过网上的搜索,感觉Silverlight Loader挺好用的,下面详细介绍一下怎么使用Silverlight Loader。 Silverlight Loader的下载地址如下:http://silverlightloader.codeplex.com/ 这是我做的一个加载例子,源代码可参考网址:http://download.csdn.net/source/2360365/ 其实文章并不长,

通过网上的搜索,感觉Silverlight Loader挺好用的,下面详细介绍一下怎么使用Silverlight Loader。
Silverlight Loader的下载地址如下:http://silverlightloader.codeplex.com/

这是我做的一个加载例子,源代码可参考网址:http://download.csdn.net/source/2360365/


其实文章并不长,只有下面红色的部分才是需要你实现的代码。

开发平台
我用的是Visual Studio 2010 + Silverlight 4
其实用Visual Studio 2010/2008 + Silverlight 4/3都可以的

下面首先介绍一下加载的原理:
其实就是建二个项目:一个较小,用于加载较大的项目文件,并在加载过程中给用户显示加载进度,假设为slloader.xap;另一个为我们的具体功能实现项目,不妨假设为LoadTarget.xap。
客户端下载程序时,首先加载slloader.xap,这个过程应该是比较快的,然后由slloader.xap一边加载较大的LoadTarget.xap,一边显示进度或动画,当加载LoadTarget.xap完毕后,就调用打开LoadTarget.xap,至些,我们的项目已加载完毕。

关于该加载过程的详细资料,可参考如下页面
How the Silverlight loader works
http://www.apijunkie.com/APIJunkie/blog/page/How-the-Silverlight-loader-works.aspx
Silverlight Loader Getting Started GuIDe
http://www.apijunkie.com/APIJunkie/blog/page/Silverlight-Loader-Getting-Started-Guide.aspx
Silverlight Loader Class Diagram
http://silverlightloader.codeplex.com/wikipage?title=Class%20Diagram&referringTitle=Home

网上有一篇关于实现加载的介绍,基本上是翻译过来的,不是很详细,文章在此:
http://silverlightchina.net/html/tips/2010/0115/588.html

下面我根据上面的几篇文章详细介绍项目的实现过程:

第一步:创建一个slloader.xap项目或在现有的slloader.xap项目中使用Silverlight Loader

1.在现有slloader.xap项目中使用SilverlightLoader:先下载SilverlightLoader压缩包,从下载的Release中找到SilverlightLoader.cs,并将其添加到slloader.xap项目中,具体实现方法:在slloader.xap项目中右键添加已有项,浏览找到SilverlightLoader.cs即可添加。
2.通过项目模板创建一个slloader.xap项目:将SilverlightLoader模板文件拷贝到VS的模板文件夹下,如My documents\Visual Studio 2008\ProjectTemplates\Visual C#。而后就可以在新建项目时看到Silverlight Loader项目了。

第二步:实现ISliverlightLoader接口

1.添加对SilverlightLoader的引用
在App.xaml.cs中添加对命名空间SilverlightLoader的引用,实现代码:
using SilverlightLoader;
在MainPage.xaml.cs中添加对命名空间SilverlightLoader的引用,实现代码:
using SilverlightLoader;

2.创建动态加载外部数据的开始点
在App.xaml.cs中的Application_Startup事件中开始载入数据包,代码如下:

private voID Application_Startup(object sender,StartupEventArgs e)
{
    //无需该默认语句
    //this.RootVisual = new MainPage();

    //建立加载页
    MainPage loader = new MainPage();

    //设置该加载页为加载项
    this.RootVisual = loader;

    //建立加载数据包管理类,并开始加载目标xap,
    //该类的构造函数中的第三个参数为模拟加载网速,
    //为了模拟加载过程和调试,可以通过设置该参数来模拟加载速度,单位为Kb,
    //当设该参数为0时,则采用真实带宽加载目标xap。
    PackageDownloadManager pdm = new PackageDownloadManager(loader,e.InitParams,0);
}

3.在MainPage.xaml.cs中实现ISliverlightLoader接口
有如下几个ISilverlightLoader接口需要添加,也就是在下面几接口中实现加载进度的交互显示:
// 初始化加载须加载的数据包列表
voID initCallback(List<Uri> packageSourceList);        
// 回调函数,用于标识开始加载数据包
voID downloadStartCallback(Uri packageSource);
// 回调函数,用于标识加载进度发生变化
voID downloadProgressCallback(Uri packageSource,DownloadProgressEventArgs eventArgs);
// 回调函数,用于标识加载数据包结束
voID downloadCompleteCallback(Uri packageSource,DownloadCompleteEventArgs eventArgs);

MainPage.xaml.cs中的实现代码如下,我现在把MainPage.xaml.cs的代码全部粘上,红色部分为所添加代码:
using System;
using System.Collections.Generic;
using System.linq;
using System.Net;
using System.windows;
using System.windows.Controls;
using System.windows.documents;
using System.windows.input;
using System.windows.Media;
using System.windows.Media.Animation;
using System.windows.Shapes;
using SilverlightLoader;

namespace slloader
{
    //注意此处的类继承:SilverlightLoader.ISilverlightLoader
    public partial class MainPage : UserControl,SilverlightLoader.ISilverlightLoader
    {
        public MainPage()
        {
            InitializeComponent();
        }

        #region ISilverlightLoader Members

        //初始化加载须加载的数据包列表
        voID ISilverlightLoader.initCallback(System.Collections.Generic.List<Uri> packageSourceList)
        {

        }

        //回调函数,用于标识开始加载数据包
        voID ISilverlightLoader.downloadStartCallback(Uri packageSource)
        {
            LoadProgress.Text = "加载初始化...";
        }

        //回调函数,用于标识加载进度发生变化
        voID ISilverlightLoader.downloadProgressCallback(Uri packageSource,DownloadProgressEventArgs eventArgs)
        {
            float offset = ((float)eventArgs.Progresspercentage * 4 / 100f) * 1000;
            TimeSpan ts = new TimeSpan(0,(int)offset);
            
            //显示加载进度,例如下面二行代码中LoadProgress为一个Textblock,LoadProgressbar为一个进度条,则可以使用下面语句显示进度
            LoadProgress.Text = eventArgs.Progresspercentage.ToString() + "%";
            LoadProgressbar.Value = eventArgs.Progresspercentage;
        }

        //回调函数,用于标识加载数据包结束
        voID ISilverlightLoader.downloadCompleteCallback(Uri packageSource,DownloadCompleteEventArgs eventArgs)
        {
            LoadProgress.Text = "加载完成";
            XapUtil.setCurrentXapfile(packageSource);
        }

        #endregion
    }
}

第三步:在HTML页面或asp:Silverlight控件设置初始载入界面与载入目标
该步就是在HTML或asp:Silverlight控件中加入对slloader.xap的调用,并将LoadTarget.xap的名字做为参数传递给slloader.xap,以便加载,
可以看出,在建立整个项目的过程中,slloader.xap和LoadTarget.xap并不需要打交道,只在HHTML或asp:Silverlight控件设置中才把二者联系起来。

1.HTML中的设置方法:
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2"
    wIDth="550" height="400">
    <param name="source" value="slloader.xap" />
    <param name="onerror" value="onSilverlightError" />
    <param name="background" value="white" />
    <param name="minRuntimeVersion" value="2.0.31005.0" />
    <param name="autoUpgrade" value="true" />
    <param name="initParams" value="LoaderSourceList=LoadTarget.xap" />
    <a href="http://go.microsoft.com/fwlink/?LinkID=124807" >
        <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight"
        />
    </a>
</object>
注意slloader.xap和LoadTarget.xap的位置,此时把HTML文件、slloader.xap和LoadTarget.xap放在同一目录下即可实现加载。

2.在asp:Silverlight控件中设置的方法
<asp:Silverlight ID="Xaml1" runat="server" Source="~/slloader.xap" MinimumVersion="2.0.31005.0"
    WIDth="550" Height="400" InitParameters="LoaderSourceList=LoadTarget.xap" />
与在HTML中通过Object对象设置的原理相同。

3.如果此时编译slloader.xap项目,可能通不过,提示缺少对System.Runtime.Serialization.Json的引用,
为解决此问题,需要添加如下三个引用,参考文章:http://www.cnblogs.com/Blackie/archive/2009/07/09/1520080.html
1.System.Runtime.Serialization
2.System.ServiceModel
3.System.ServiceModel.Web

至此,一个加载功能制作完毕。

注意事项:
(1)App和MailPage都需要添加对命名空间SilverlightLoader的引用;
(2)PackageDownloadManager类构造函数中的第三个参数需要更改,看前面的代码注释,在此处将参数改为一个较小的值,即可减小加载速度,以便查看加载效果;
(3)需要添加以下三个引用,只有同时添加,才能正确引用System.Runtime.Serialization.Json:
1.System.Runtime.Serialization
2.System.ServiceModel
3.System.ServiceModel.Web

目前已知的问题: 实现该加载功能的目的就是不想显示Silverlight默认的那个蓝色整圆圆的加载动画, 但如果网速过慢,还是会显示加载slloader.xap的动画,另外slloader.xap加载完LoadTarget.xap后,打开LoadTarget.xap的过程中也可能会出现默认的那个加载动画,虽然只是一瞬间,不知道该怎么屏蔽这个默认的动画,请大家支招

总结

以上是内存溢出为你收集整理的如何自定义silverlight的加载页面全部内容,希望文章能够帮你解决如何自定义silverlight的加载页面所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1066938.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存