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)
{
//在這里實(shí)現(xiàn)你的loading動(dòng)畫(huà)
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;
}
}