Silverlight学习(一)-使用WebClient动态加载xap文件

//看到网上有一种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的文件按功能或模块分为多个,以减小一次加载带来的负担。

posted on 2011-09-22 09:33  dcriori  阅读(274)  评论(0)    收藏  举报

导航