• Silverlight加载外部XAP包和页面


    前言:在做一个系统时,我们往往或把系统模块化,不同业务分不同的模块,模块之间互不联系,独立化,方面维护和扩展。

    在做一个Silverlight时,可以把Silverlight应用程序当成是一个模块,一个解决方案中拆分多个Silverlight,一个Silverlight就是一个一个XAP包,XAP包下面有各个具体页面。

    当调用某个模块式,加载这个XAP包,以及某个界面,就可以运行改业务操作。

    1:解决方案如下:

    其中:SilverlightApplication2为主程序,界面如下

    2:当点击点开按钮时,动态加载Demo的一个页面

    点击按钮代码如下

      private void addxap_Click(object sender, RoutedEventArgs e)
            {
    
                //1 •使用WebClient下载SLRandarHitTest.xap文件,进行异步读取。
                WebClient Appclient = new WebClient();
                Appclient.OpenReadAsync(new Uri("Demo.xap", UriKind.Relative));
                Appclient.OpenReadCompleted += new OpenReadCompletedEventHandler(Appclient_OpenReadCompleted);
            }
    
            void Appclient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
            {
                CreateXAPResource("Demo.dll", "Demo.MainPage", e.Result);
            }
    
    
            /// <summary>
            /// 创建XAP包的反射实例并且加装到Canvas中
            /// </summary>
            /// <param name="dllStr">XAP包中的编译完成的运行代码的DLL文件</param>
            /// <param name="mainStr">需要实例化的启动页面</param>
            /// <param name="resultStream">使用WebClient下载到的数据流</param>
            private void CreateXAPResource(string dllStr, string mainStr, Stream resultStream)
            {
                //2 •
                //3 •获取其他包提供的资源流信息
                StreamResourceInfo streamResourceInfo = Application.GetResourceStream(new StreamResourceInfo(resultStream as Stream, null), new Uri(dllStr, UriKind.RelativeOrAbsolute));
                //4 •对Stream进行反射
                AssemblyPart assemblyPart = new AssemblyPart();
                Assembly assembly = assemblyPart.Load(streamResourceInfo.Stream);
                //5 •(创建实例
                var uc = (UserControl)assembly.CreateInstance(mainStr);
                //主界面的容器
    lRoot.Children.Clear(); lRoot.Children.Add(uc); }

     3:最后看运行效果

  • 相关阅读:
    jquery判断浏览器类型
    webservice soapheader验证方法
    webservice跨域文件,好多年前的东西,远程调用,js服务器端使用,可以远程调用
    c# 动态调用webservice 转录一下
    linq使用 count与sum等
    js date扩展方法
    c#深拷贝的一个方法
    javascript jquery document.ready window.onload
    带你上手一款下载超 10 万次的 IDEA 插件
    Knative Serving 健康检查机制分析
  • 原文地址:https://www.cnblogs.com/Rmeo/p/3091717.html
Copyright © 2020-2023  润新知