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


        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);

  • 相关阅读:
    md笔记——HTTP知识
    百万表格难题
    微信接口改良
    md笔记——正则学习
    md笔记——编程术语
    md笔记——微信JS接口
    md笔记——使用 @font-face 引入你喜欢的字体
    博客一年记
    “挨踢”的伙食怎样?
    比尔·盖茨早年
  • 原文地址:https://www.cnblogs.com/dunnice/p/2716686.html
Copyright © 2020-2023  润新知