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:最后看运行效果

  • 相关阅读:
    LeetCode Find Duplicate File in System
    LeetCode 681. Next Closest Time
    LeetCode 678. Valid Parenthesis String
    LeetCode 616. Add Bold Tag in String
    LeetCode 639. Decode Ways II
    LeetCode 536. Construct Binary Tree from String
    LeetCode 539. Minimum Time Difference
    LeetCode 635. Design Log Storage System
    LeetCode Split Concatenated Strings
    LeetCode 696. Count Binary Substrings
  • 原文地址:https://www.cnblogs.com/Rmeo/p/3091717.html
Copyright © 2011-2022 走看看