//看到网上有一种MVVM可以完成这个功能,有时间具体研究一下。
private void GetErrorForm()
{
var Appclient = new WebClient();
Appclient.OpenReadAsync(new Uri("System.xap", UriKind.Relative));
Appclient.OpenReadCompleted += ErrorOpenReadCompleted;
}
void ErrorOpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
//System.ErrorForm 是一个继承于UserControl的类
CreateXAPResource("System.dll", "System.ErrorForm", e.Result);
}
private void CreateXAPResource(string dllStr, string mainStr, Stream resultStream)
{
//1 •获取其他包提供的资源流信息
StreamResourceInfo streamResourceInfo =
Application.GetResourceStream(
new StreamResourceInfo(resultStream, null),
new Uri(dllStr, UriKind.RelativeOrAbsolute)
);
//2 •对Stream进行反射
var assemblyPart = new AssemblyPart();
Assembly assembly = assemblyPart.Load(streamResourceInfo.Stream);
//3 •(创建实例)
var uc = (UserControl)assembly.CreateInstance(mainStr);
container.Children.Clear();//container 是容器,用来呈现动态加载出来的UserControl。
container.Children.Add(uc);
}
个人觉得,使用这种方式的好处是,可以把xap的文件按功能或模块分为多个,以减小一次加载带来的负担。