快捷搜索:

CaseStudy(showcase)数据篇-Loading的制作<BR>数据篇-Lo

做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;

}

}

您可能还会对下面的文章感兴趣: