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;

        }
    }

 


作者:nasa
出处:nasa.cnblogs.com
联系:nasa_wz@hotmail.com
QQ:12446006

posted @ 2008-07-22 19:43  王喆(nasa)  阅读(2541)  评论(3编辑  收藏  举报