- 浏览: 648967 次
- 性别:
- 来自: 石家庄
文章分类
最新评论
-
abao1:
老贾 在安装IDEA的过程中,在激活步骤时,按如下操作即可: ...
IntelliJ IDEA 2016注册方法和注册码 -
bo_hai:
./usr/bin/java: symbol lookup ...
jmagick安装步骤 -
wxcking:
不错的, 收藏一下
JAVA使用POI生成Excel文件 -
zgyfh:
大哥,密码是多少啊?zgyfh@tom.com谢谢了!新手学习 ...
WPF做的必备示例 -
记忆无泪:
jiasongmao 写道你的邮箱是多少,我可以发源代码到邮箱 ...
WPF做的必备示例
这篇介绍模块在silverlight的特殊应用.
silverlight的项目生成文件是xap文件,其提供了一个非常方便的功能,即相互的xap文件可以相互加载,就如flash的swf文件一样可以动态加载.建议你在看下去之前先看一下TerryLee写的这两篇文章
这里我简单的总结一下silverlight程序初始化的步骤.总目标是要拿到xap里面的UserControl
1.先加载xap文件,xap文件包括一个xaml文件和一堆相关的dll(这里就可以知道dll越多,加载速度越慢了)
2.找到入口点主程序,看Deployment节点的两个属性,一个是程序集,一个是App入口点.然后就可以通过反射初始化了.
<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" EntryPointAssembly="RemoteModuleLoading.Silverlight" EntryPointType="RemoteModuleLoading.Silverlight.App" RuntimeVersion="2.0.31005.0"> <Deployment.Parts> <AssemblyPart x:Name="RemoteModuleLoading.Silverlight" Source="RemoteModuleLoading.Silverlight.dll" /> <AssemblyPart x:Name="Infrastructure.Silverlight" Source="Infrastructure.Silverlight.dll" /> <AssemblyPart x:Name="Microsoft.Practices.Composite.Silverlight" Source="Microsoft.Practices.Composite.Silverlight.dll" /> <AssemblyPart x:Name="Microsoft.Practices.Composite.UnityExtensions.Silverlight" Source="Microsoft.Practices.Composite.UnityExtensions.Silverlight.dll" /> <AssemblyPart x:Name="Microsoft.Practices.Unity" Source="Microsoft.Practices.Unity.dll" /> <AssemblyPart x:Name="Microsoft.Practices.ServiceLocation.Silverlight" Source="Microsoft.Practices.ServiceLocation.Silverlight.dll" /> <AssemblyPart x:Name="Microsoft.Practices.Composite.Presentation.Silverlight" Source="Microsoft.Practices.Composite.Presentation.Silverlight.dll" /> <AssemblyPart x:Name="System.Windows.Controls" Source="System.Windows.Controls.dll" /> </Deployment.Parts> </Deployment>
那么加载外部的xap文件该如何做呢?
1.先下载好要加载的xap文件
2.然后再读取xap的那个xaml文件
3.反射加载dll文件,拿到我们想要的内容.
我想大致应该是如此,prism对此功能进行了一些封装.让我们来看看prism是如何实现这一功能的.
模块组功能(ModuleInfoGroup)
prism v2添加一个模块组的功能,我们可以来看一下下面的类图关系.
1.ModuleCatalog是一个模块集合,Items是其默认的集合属性,Item的类型是IModuleCatalogItem,该接口是 一个空实现,作为一个标识作用,ModuleInfoGroup和ModuleInfo实现了这个接口,这就可以实现同时添加这两个类型到集合里面.
public Collection<IModuleCatalogItem> Items { get { return items; } }
那么ModuleCatalog的ModuleInfo集合便是ModuleInfoGroup和ModuleInfo的并集.
以xaml文件代替app.config配置文件来加载模块
xaml文件有个好处,可以加载xaml文件,然后可以将在xaml文件转成你需要的对象.这也是这篇要讲的重点.
我们先来看一下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.Silverlight"> <Modularity:ModuleInfoGroup Ref="ModuleX.Silverlight.xap" InitializationMode="OnDemand"> <Modularity:ModuleInfo ModuleName="ModuleX" ModuleType="ModuleX.ModuleX, ModuleX.Silverlight, Version=1.0.0.0" /> </Modularity:ModuleInfoGroup> <Modularity:ModuleInfoGroup Ref="ModulesWY.Silverlight.xap" InitializationMode="WhenAvailable"> <Modularity:ModuleInfo ModuleName="ModuleY" ModuleType="ModuleY.ModuleY, ModulesWY.Silverlight, Version=1.0.0.0"> <Modularity:ModuleInfo.DependsOn> <sys:String>ModuleW</sys:String> </Modularity:ModuleInfo.DependsOn> </Modularity:ModuleInfo> <Modularity:ModuleInfo ModuleName="ModuleW" ModuleType="ModuleW.ModuleW, ModulesWY.Silverlight, Version=1.0.0.0"> </Modularity:ModuleInfo> </Modularity:ModuleInfoGroup> <!-- Module info without a group --> <Modularity:ModuleInfo Ref="ModuleZ.Silverlight.xap" ModuleName="ModuleZ" ModuleType="ModuleZ.ModuleZ, ModuleZ.Silverlight, Version=1.0.0.0" /> </Modularity:ModuleCatalog>
定义好配置文件以后重写Bootstrapper的GetModuleCatalog方法,这个Bootstrapper已经提很多遍了,用ModuleCatalog的静态方法CreateFromXaml创建IModuleCatalog对象
protected override IModuleCatalog GetModuleCatalog() { return ModuleCatalog .CreateFromXaml( new Uri ("/RemoteModuleLoading.Silverlight;component/ModulesCatalog.xaml" , UriKind .Relative)); protected override IModuleCatalog GetModuleCatalog() { return ModuleCatalog.CreateFromXaml( new Uri("/RemoteModuleLoading.Silverlight;component/ModulesCatalog.xaml", UriKind.Relative)); } }
发表评论
-
silvelright酷站
2011-03-22 18:47 775http://completit.com/# -
silverlight翻转代码
2011-03-13 18:46 1073using System; using System.Net ... -
silverlight独立存储示例
2011-03-07 17:17 1020void CreateDir(string dirNam ... -
silverlight SDK和toolit中控件英文如何转换为英文
2010-11-11 15:50 961解决方法: 设置 ... -
Silverlight4:网络地图服务
2010-10-16 11:01 1530Bing Maps与Google Earth一样 ... -
通过JS创建silverlight对象
2010-10-12 13:04 1601前言: 对于我们开发的silverlight应用来讲,有的时 ... -
silverlight childwindow源码
2010-09-18 21:17 1936<!-- // (c) Copyright Micro ... -
精彩的 Silverlight 开源项目
2010-08-18 14:32 2891Silverlight 物理模型 http://www.c ... -
MEF程序设计指南五:迟延(Lazy)加载导出部件(Export Part)与元数据(Metadata)
2010-08-12 10:34 898本文章非原创,转载自: 作 者:Beniao 文 ... -
MEF程序设计指南四:使用MEF声明导出(Exports)与导入(Imports)
2010-08-12 10:03 571本文章非原创,转载自: 作 者:Beniao 文 ... -
MEF程序设计指南三:MEF中组合部件(Composable Parts)与契约(Contracts)的基本应用
2010-08-12 09:52 507本文章非原创,转载自: 作 者:Beniao 文 ... -
MEF程序设计指南二:Silverlight中使用CompositionInitializer宿主MEF
2010-08-12 09:24 823本系列文章非原创,转载自: 作 者:Beniao ... -
MEF程序设计指南一:在应用程序中宿主MEF
2010-08-12 09:17 986本系列文章非原创,转 ... -
silverlight应用程序库缓存
2010-08-10 14:22 1468应用程序库缓存可在用户重新访问网站时帮助改善启动性能。 ... -
Silverlight中Json数据的转换方法(中文)
2010-08-04 11:36 1207[DataContract] public clas ... -
silverlight万花筒效果
2010-07-28 16:14 835见附件。 -
silverlight如何将颜色字符串转换为颜色
2010-07-02 10:42 1502public class ColorUtil { ... -
silverlight中Tab转Enter的实现方法
2010-06-04 17:38 1696silverlight项目中要求界面全键盘操作,并且在光标移动 ... -
在两个Silverlight应用间数据通信(包括与Flash通信)
2010-05-13 17:06 973声明:该博文转载自:http://daizhj.blog.51 ... -
silverlight和js相互调用
2010-05-13 16:56 1629步骤一:在silverlight后台代码类中声明被js调用的方 ...
相关推荐
C#+WPF+Prism模块化开发示例。本示例简述了Prism框架的基本应用,包括数据绑定,事件等内容
prism.dll动态库文件,是一款关于网络应用的动态库。经常在win7下遇到缺少动态库文件,点击下载安装即可~
主要采用了Prism.DryIoc的MVVM方式,用到控件和方法:ItemsControl(控件模板)、Thumb(可拖动控件)、Adorner(装饰器)、CommandParameter的多参数传递、GetChildObjectByUid(通过UID查找某类型的子控件)
教你从基础开始,学习使用Prism组件实现netCore形式WPF的模块化开发;这是一个脑图总结大纲和分享PPT,里面是学习遇到的问题解决和思考,细节的东西较少
通过选中CheckBox, 实现新增多个控件的实现,例子做为新手学习是很好的,带完整注释 出自 轻吟浅唱,蓦然花开 大神。 https://www.cnblogs.com/nickyangmiracle/p/16169338.html 欢迎大家前去学习
Prism系列之模块化
演示了如何使用prism mef来加载模块。代码中有module1 module2两个独立模块。模块1启动加载,模块2通过命令加载。代码结构组织简单,适合初学者
WPF Prism
Prism 模块化 导航 Dialog 消息定阅
速度最快,简单易懂的插件
prism模板 vs插件
1、Prism各个重要概念实例 2、MVVM架构 3、WPF中使用Prism
WPF Prism 依赖注入实现可关闭的TabControl。
The crack process of Delphi Prism Xe: 1. Install Delphi Prism Xe with key:MAAF-SPD7DK-BLAGAD-FEBN 2. Copy PrismXe.slip to C:\Program Files\Embarcadero\Delphi Prism\License 3. Copy sanctuarylib.dll to ...
1.使用WPF在.net6中使用Prism框架 2.Prism中Region(区域),Module(模块),Navigation(导航),对话服务,发布订阅等介绍和使用
Prism经典案例
VS2022的在线插件库中未收录PrismTemplate插件,导致无法直接在VS中安装Prism模板插件。 该插件基于官网插件修改安装支持版本后,可直接安装使用(电脑只有VS2022)。 如果电脑有多版本VS,需要右键在打开方式中选择...
MVVM PRISM DEMOMVVM PRISM DEMOMVVM PRISM DEMOMVVM PRISM DEMOMVVM PRISM DEMOMVVM PRISM DEMOMVVM PRISM DEMOMVVM PRISM DEMO
WPF 实现TabControl 中动态添加选项卡、动态添加Frame
这是一个利用prim中的command的小例子,很简单适合初学者,可以把在对象中的通过修改模板添加的按钮绑定command后,通过命令,把当前对象传递到后台处理。