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
联系:[email protected]
QQ:12446006

你可能感兴趣的:(load)