zoukankan      html  css  js  c++  java
  • [Silverlight]通过SilverlightLoader使用托管代码创建自定义载入界面(Splash Screen) (上)

    Silverlight中的Splash Screen,也就是我们常说的载入页面/界面。

    对Silverlight有过一些接触的朋友们一定都清楚:要创建Silverlight的自定义载入页面,我们需要创建一个非托管的XAML,并且通过js来做出进度可控制等操作。

    使用非托管XAML+js的解决方案详见MSDN:http://msdn.microsoft.com/zh-cn/library/cc903962(VS.95).aspx

    这样做的缺点是显而易见的

    • 没有代码感知
    • 没有错误检查
    • 一直延续着sl1的做法,使用js操作XAML,着实麻烦。而且js也继承了上面两条缺点。

    鉴于以上所述的缺点,我在项目中已经放弃了这种做法转而使用SilverlightLoader,今天的这篇文章就是要对SilverlightLoader做一个简单的说明,下一篇文章会提供一个应用实例。

    什么是Silverlight Loader?

    Silverlight Loader 是一个用于使用托管代码创建Silverlight Splash Screen或(预)载入页面功能的简单的轻量级框架。并且它是开源的。

    它在CodePlex的地址如下:http://www.codeplex.com/SilverlightLoader,我们需要先下载它的最新Release。

    如何使用Silverlight创建Splash Screen?

    第一步:创建一个Silverlight Loader项目或在现有的Silverlight项目中使用它
    • 在现有项目中使用SilverlightLoader:从我们下载的Release中找到SilverlightLoader.cs将其添加到项目的任意目录中。打开我们的项目,将SilverlightLoader.cs作为已存在的文件添加到当前项目中。
    • 通过项目模板创建一个Silverlight Loader项目:将SilverlightLoader模板文件拷贝到VS的模板文件夹下,如My Documents\Visual Studio 2008\ProjectTemplates\Visual C#。而后就可以在新建项目时看到Silverlight Loader项目了。
    第二步:实现ISliverlightLoader接口并设置Source
    • 实现ISliverlightLoader接口

    ISilverlightLoader接口的定义如下

        public interface ISilverlightLoader
        {
            // 初始化加载须加载的数据包列表
            void initCallback(List<Uri> packageSourceList);
            
            // 回调函数,用于标识开始加载数据包
            void downloadStartCallback(Uri packageSource);
    
            // 回调函数,用于标识加载进度发生变化
            void downloadProgressCallback(Uri packageSource, DownloadProgressEventArgs eventArgs);
    
            // 回调函数,用于标识加载数据包结束
            void downloadCompleteCallback(Uri packageSource, DownloadCompleteEventArgs eventArgs);
        }

    注释是我加的,应该比较清晰了,这里不多做解释

    • 创建动态加载外部数据的开始点

    一般我们会在App.xaml.cs中的Application_Startup事件中开始载入数据包

    private void Application_Startup(object sender, StartupEventArgs e) { // 实例化一个载入页面 ProgressBaby loader = new ProgressBaby(); // 将载入界面设置为默认页面 this.RootVisual = loader;

     

    // 载入外部数据包(XAP) PackageDownloadManager pdm = new PackageDownloadManager(loader, e.InitParams, 1000); }

    第三步:在HTML或asp:Silverlight控件设置初始载入界面与载入目标
    • HTML中的设置方法
    <object data="data:application/x-silverlight-2," type="application/x-silverlight-2"
        width="550" height="400">
        <param name="source" value="ClientBin/Loader.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=ClientBin/Forever.xap" />
        <a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">
            <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight"
                style="border-style: none" />
        </a>
    </object>

    注意加下划线的两行,Source为载入页面的XAP数据包。initParams中LoaderSourceList的值为载入目标的XAP数据包地址。上例中,我们使用Loader.xap载入Forever.xap。

    • 在asp:Silverlight控件中设置的方法
    <asp:Silverlight ID="Xaml1" runat="server" Source="~/ClientBin/Loader.xap" MinimumVersion="2.0.31005.0"
        Width="550" Height="400" InitParameters="LoaderSourceList=ClientBin/Forever.xap" />

    与在HTML中通过Object对象设置的原理相同,也不多说了。

    接下来要做的事

    以上设置完毕后我们的SilverlightLoader还没有大功告成。在数据包载入之后不要忘记手动将加载完成的数据包设置成当前数据包。

    我们需要通过XapUtil.setCurrentXapFile(source)设置当前数据包。

    void ISilverlightLoader.downloadCompleteCallback(Uri packageSource, DownloadCompleteEventArgs eventArgs) {
    
        XapUtil.setCurrentXapFile(packageSource);
    }

    至此,一个完整的SilverlightLoad托管Splash Screen就完成了。怎么样,心动了吗?快自己动手做做,做好的载入效果不放共享出来。

    下一篇将已一个简单的在线实例向大家演示具体效果。

    OK,have fun~

  • 相关阅读:
    未能加载文件或程序集“xxx, Version=x.x.x.x, Culture=neutral, PublicKeyToken=xxxxxxxxxxxx”或它的某一个依赖项。系统找不到指定的文件
    RabbitMQ本地正常,发布到服务器上 出行连接失败
    Windows 服务 创建 安装 卸载 和调试
    CSS 格式化 一行一条
    ES6---new Promise()讲解,Promise对象是用来干嘛的?
    Win Server 2008 R2 IIS 默认只能添加一个 443 HTTPS 端口
    MVC 部分视图:Partial() 、RenderPartial() 、 Action() 、RenderAction() 、 RenderPage() 区别
    ;(function ($, undefined){ })(jQuery); 的使用及说明
    JS中的call()方法和apply()方法用法总结
    MongoDB服务无法启动,windows提示发生服务特定错误:100
  • 原文地址:https://www.cnblogs.com/024hi/p/1634354.html
Copyright © 2011-2022 走看看