CaseStudy(showcase)数据篇-Loading的制作

做silvelight也有一段时间了,相册、游戏,刚刚完成的showcase这个小程序算是一个阶段了。这里就以showcase这个项目来做一下CaseStudy。

数据篇-Loading的制作

silverlight自带了一个loading。但是由于界面的需求可能需要定制化一下。这里我的思路是做两个sl文件用其中一个去加载另外一个。也就是说有两个xap文件一个是主要的也就是你做的silverlight程序文件,另一个小的是用来做loading的。

参考文章: 技巧:在Silverlight中如何访问外部xap文件中UserControl

public partial class Page : UserControl
     {
 public Page()
         {
             InitializeComponent();
             App.Current.Host.Content.Resized += new EventHandler(Content_Resized);
             App.Current.Host.Content.FullScreenChanged += new EventHandler(Content_FullScreenChanged);
 
 this.Init();
         }
 
 private void Init()
         {
             Uri address = new Uri(HtmlPage.Document.DocumentUri, "ClientBin/showcase.xap");
             WebClient webClient = new WebClient();
             webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
             webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
             webClient.OpenReadAsync(address);
 
         }
 
 void webClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
         {
 //在这里实现你的loading动画
  double per = Convert.ToDouble(e.ProgressPercentage) / Convert.ToDouble(100);
             loadBar.Height = (App.Current.Host.Content.ActualHeight - 16) * per;
         }
 
 void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
         {
             Assembly assembly = LoadAssemblyFromXap(e.Result, "showcase.dll");
             UIElement element = assembly.CreateInstance("showcase.Page") as UIElement;
 this.LayoutRoot.Children.Clear();
 this.LayoutRoot.Children.Add(element);
         }
 
         Assembly LoadAssemblyFromXap(Stream packageStream, String assemblyName)
         {
             Stream stream = Application.GetResourceStream(
 new StreamResourceInfo(packageStream, null),
 new Uri("AppManifest.xaml", UriKind.Relative)).Stream;
 
             String appManifestString = new StreamReader(stream).ReadToEnd();
 
             Deployment deployment = (Deployment)XamlReader.Load(appManifestString);
 
             Assembly assembly = null;
 foreach (AssemblyPart assemblyPart in deployment.Parts)
             {
 if (assemblyPart.Source == assemblyName)
                 {
                     String source = assemblyPart.Source;
 
                     StreamResourceInfo streamInfo = Application.GetResourceStream(
 new StreamResourceInfo(packageStream,
 "application/binary"),
 new Uri(source, UriKind.Relative));
 
                     assembly = assemblyPart.Load(streamInfo.Stream);
 break;
                 }
             }
 return assembly;
         }
 
 
 void Content_FullScreenChanged(object sender, EventArgs e)
         {
 this.ResizeFrame();
         }
 
 void Content_Resized(object sender, EventArgs e)
         {
 this.ResizeFrame();
         }
 
 void ResizeFrame()
         {
             (this as UserControl).Width = App.Current.Host.Content.ActualWidth;
             (this as UserControl).Height = App.Current.Host.Content.ActualHeight;
         }
 
 void FullScreenMode()
         {
             App.Current.Host.Content.IsFullScreen = !App.Current.Host.Content.IsFullScreen;
 
         }
     }
 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏飞扬的花生

HttpContext.Cache属性

      HttpContext基于HttpApplication的处理管道,由于HttpContext对象贯穿整个处理过程,所以,可以从HttpApplic...

2375
来自专栏木宛城主

SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用

由于项目的需要,登录SharePoint Application的用户将从一个统一平台中获取,而不是从Domain中获取,所以需要对SharePoint Ap...

2319
来自专栏GreenLeaves

C#核编之System.Console类

      顾名思义,Console类封装了基于控制台的输入输出和错误流的操作,下面列举一些System.Console类常用的成员的,这些成员能为简单的命令行...

2005
来自专栏飞扬的花生

基于ASP.MVC票据FormsAuthenticationTicket身份认证

做一个最基础的业务需求用户登录,将此用户的身份发回到客户端的Cookie,之后此用户再访问这个web应用就会连同这个身份Cookie一起发送到服务端。服务端上的...

3467
来自专栏码农分享

4.爬虫框架Clawler 爬取优酷电影名 分页+多线程

基于文章三我们实现了爬虫框架单页面应用程序的代码,那么在这一章节我们将使用框架进行内容分页和多线程的操作

1513
来自专栏JadePeng的技术博客

c# IO&&线程 打造 定时打开指定程序

     用IO以及线程轻松实现 定时器 ,在指定的时间打开指定的程序:) ?     首先是如何实现定时?这可以单独的用个线程,在时间到的时候打开程序    ...

1946
来自专栏跟着阿笨一起玩NET

ASP.NET通过http/https的POST方式,发送和接受XML文件内容

 本文转载:http://hi.baidu.com/ysyhyt/item/5011ae39ce3cf49fb80c0395

3431
来自专栏菩提树下的杨过

ExtJs学习笔记(5)_Ajax示例

ExtJs对于Ajax的使用非常简单,看下面的代码: 1.Html页: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0...

2086
来自专栏张善友的专栏

Quartz.NET 1.0.1发布

这个版本包含1.0版本发布以来发现的bug修复,也包括使用AdoJobStore时的性能优化,增加了一个新特性是对SQL Server Compact Edit...

1896
来自专栏张善友的专栏

RESTful WCF

相较 WCF、WebService 使用 SOAP、WSDL、WS-* 而言,几乎所有的语言和网络平台都支持 HTTP 请求。我们无需去实现复杂的客户端代理,无...

19110

扫码关注云+社区