您的位置:首页 > 其它

Silverlight中,很多实例可以使用Xaml的方式进行配置实现的注意事项和原理

2012-10-09 14:00 721 查看
Silverlight中,很多实例可以使用Xaml的方式进行配置实现,但是应该怎么配置呢?

实际上,就像实例化一个对象一样, 需要声明民名空间,对象的属性等等. 下面有一个例子:

Prism中配置module可以使用Xaml来配置, 实际上就是配置的一个ModuleCatalog的实例,和我们一般在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.Prism.Modularity;assembly=Microsoft.Practices.Prism">

<Modularity:ModuleInfo Ref="ModuleA.xap" ModuleName="ModuleA"

ModuleType="ModuleA.ModuleA, ModuleA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />

<Modularity:ModuleInfo Ref="ModuleB.xap" ModuleName="ModuleB" InitializationMode="OnDemand"

ModuleType="ModuleB.ModuleB, ModuleB, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />

<Modularity:ModuleInfo Ref="ModuleC.xap" ModuleName="ModuleC" InitializationMode="OnDemand"

ModuleType="ModuleC.ModuleC, ModuleC, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">

<Modularity:ModuleInfo.DependsOn>

<sys:String>ModuleB</sys:String>

</Modularity:ModuleInfo.DependsOn>

</Modularity:ModuleInfo>

</Modularity:ModuleCatalog>

然后再代码中这样加载:

Microsoft.Practices.Prism.Modularity.ModuleCatalog.CreateFromXaml(

new Uri("/PrismModule;component/ModuleCatalog.xaml", UriKind.Relative));

为什么可以这样呢: 实际上内部是调用了silverlight提供的XamlReader的Load方法将Xaml转换成对象的.

对应的使用代码版本什么的是这样的:

Type typeA = typeof(ModuleA.ModuleA);

ModuleInfo moduleA = new ModuleInfo

{ // ModuleA没有设置InitializationMode,默认为WhenAvailable

ModuleName = typeA.Name,

ModuleType = typeA.AssemblyQualifiedName,

};

Type typeB = typeof(ModuleB.ModuleB);

ModuleInfo moduleB = new ModuleInfo

{

ModuleName = typeB.Name,

ModuleType = typeB.AssemblyQualifiedName,

InitializationMode = InitializationMode.OnDemand,

};

Type typeC = typeof(ModuleC.ModuleC);

ModuleInfo moduleC = new ModuleInfo

{

ModuleName = typeC.Name,

ModuleType = typeC.AssemblyQualifiedName,

InitializationMode = InitializationMode.OnDemand,

// ModuleC依赖于ModuleB

DependsOn = new Collection<string> { moduleB.ModuleName },

};

this.ModuleCatalog.AddModule(moduleA);

this.ModuleCatalog.AddModule(moduleB);

this.ModuleCatalog.AddModule(moduleC);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐