建立可扩展的silverlight 应用框架 step-4
时间:2022-04-22
本文章向大家介绍建立可扩展的silverlight 应用框架 step-4,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
通过外部配置文件加载模块module
在上一节中为项目引入了“Prism”框架,并建立了一个Hello Prism做测试。这里要把项目好好的整理一下。使其更加的合理和具有可扩展性。
我的目的是,在左侧的导航栏目里点击按钮,相应的右侧的主体部分显示不同的内容。这些内容都是来自外部加载进来的xap文件。我可以上传管理自己的xap文件。 这里来看一下我的整理过程 首先将布局划分为两个部分:“LeftNavRegion”、“MainRegion”,一个来承放导航,一个来承放主体内容。 接下来就要加载相关的Module了。
关于Module的加载,园子里的包包同学已经对他做了很详细的分析。具体请看《Prism研究(for WPF & Silverlight)5.Module研究》
在看完了他的文章后,了解到加载Module有两种方法:
1.手动加载Module
例:
protected override IModuleCatalog GetModuleCatalog()
{
ModuleCatalog catalog = new ModuleCatalog()
.AddModule(typeof(OperatingTableTestModule.HelloPrismModule))
.AddModule(typeof(OTLeftNavModule.OTLeftNavModule));
return catalog;
}
2.根据配置文件动态加载Module
例:
protected override IModuleCatalog GetModuleCatalog()
{
return ModuleCatalog.CreateFromXaml(new Uri("/OperatingTable;component/ModulesCatalog.xaml", UriKind.Relative));
}
再说一下我需要的,我想通过自己上传xap文件动态的来管理。这里我发现配置文件都是在xap文件内部的。不过在可以直接传入一个配置文件的流来进行实例化。 这里我改造了一下项目,在sl应用刚刚启动的时候就去外部加载这个配置文件,在取到了流以后,把流赋值给Bootstrapper
private void Application_Startup(object sender, StartupEventArgs e)
{
bootstrapper = new Bootstrapper();
//去外部加载配置文件
var uri = new Uri(HtmlPage.Document.DocumentUri, "ModulesCatalog.xaml");
WebClient wb = new WebClient();
wb.OpenReadCompleted += new OpenReadCompletedEventHandler(wb_OpenReadCompleted);
wb.OpenReadAsync(uri);
}
void wb_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error == null)
{
bootstrapper.ModulesCatalogStream = e.Result;
bootstrapper.Run();
}
}
配置文件“ModulesCatalog.xaml”:
<Modularity:ModuleCatalog xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:Modularity="clr-namespace:Microsoft.Practices.Composite.Modularity;assembly=Microsoft.Practices.Composite">
<Modularity:ModuleInfo Ref="OperatingTableTestModule.xap" ModuleName="OperatingTableTestModule" ModuleType="OperatingTableTestModule.HelloPrismModule, OperatingTableTestModule, Version=1.0.0.0" />
<Modularity:ModuleInfo Ref="OTLeftNavModule.xap" ModuleName="OTLeftNavModule" ModuleType="OTLeftNavModule.OTLeftNavModule, OTLeftNavModule, Version=1.0.0.0" />
<Modularity:ModuleInfo Ref="OTWelcomeModule.xap" ModuleName="OTWelcomeModule" ModuleType="OTWelcomeModule.OTWelcomeModule, OTWelcomeModule, Version=1.0.0.0" InitializationMode="OnDemand" />
</Modularity:ModuleCatalog>
这里就可以自己做上一套asp.net程序来上传xap文件并且生成配置文件“ModulesCatalog.xaml”来供给Prism SL应该来读取了。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 8.ffmpeg-基础常用知识
- 9.下载ffmpeg、使QT支持同时编译32位和64位
- 10.QT-QAudioOutput类使用
- 11.QT-ffmpeg+QAudioOutput实现音频播放器
- Spring JPA 自定义删改
- LeetCode-28.实现 strStr()
- 【工具篇】程序员不愿意写 PPT 是姿势不对?
- 机器学习还能预测心血管疾病?没错,我用Python写出来了
- Fasttext 总结
- PathClassLoader加载与查找类
- springboot maven项目引入并打包本地JAR
- 移植lua5.2和luasocket库到嵌入式linux,使能强大的lua脚本和网络功能
- Go或者C中调用Lua业务脚本,实现终端应用的热更新机制
- 多线程基础(八):ReentrantLock的使用及与synchronized的区别
- 在java中notify和notifyAll的区别