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

2018-01-16 13:55:18 浏览数 (1)

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

数据篇-Loading的制作

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

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

代码语言:js复制
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 人点赞