zoukankan      html  css  js  c++  java
  • 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:最后看运行效果

  • 相关阅读:
    NSUserDefaults
    版本控制
    真机调试流程
    UIImageView加载图片的两种方式
    UI控件之--UIButton
    Xcode错误总结
    自动布局AutoLayout
    地理编码和反地理编码
    WordPress NOSpam PTI插件‘comment_post_ID’参数SQL注入漏洞
    WordPress RokMicroNews插件‘thumb.php’ 多个安全漏洞
  • 原文地址:https://www.cnblogs.com/Rmeo/p/3091717.html
Copyright © 2011-2022 走看看