Prism的Region、Module及其应用

Region

Region即在界面中划分的区域。如在windows的资源管理器中,我们可以大致分为工具栏、导航栏、内容栏等,则可以划分为不同的Reigon。

image-20250218205610896

定义Region

在Prism中,可以使用XAML或代码创建定义Region

  • RegionManager.RegionName(XAML)
  • RegionManager.SetRegionName(CS Code)

如下代码:

<Window x:Class="New.UPatrolInspection.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:New.UPatrolInspection"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800"
        xmlns:prism="http://prismlibrary.com/"
        Loaded="Window_Loaded">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="80"/>
            <RowDefinition/>
        </Grid.RowDefinitions>

        <ContentControl Grid.Row="0" prism:RegionManager.RegionName="ToolBarRegion"/>
        <ContentControl Grid.Row="1" prism:RegionManager.RegionName="ContentRegion"/>
    </Grid>
</Window>

Module

在一个应用程序中,一些特定的功能是独立存在的模块,他们有独立的视图(View)和业务逻辑。这些模块在Prism中我们可以建立一个Module,然后将这些视图和业务逻辑在其中独立实现。

在应用程序中,我们已经划分了Region。之后我们就可以动态的加载Module,然后为指定的Region动态分配内容。

创建Module

在WPF应用程序中,创建一个ModuleA,实现Prism的IModule接口。

public class ModuleAModule : IModule
{
   
   
    /// <summary>
    /// 通知模块已被初始化。
    /// </summary>
    /// <param name="containerProvider"></param>
    public void OnInitialized(IContainerProvider containerProvider)
    {
   
   
    }

    /// <summary>
    /// 用于在您的应用程序将使用的容器中注册类型。
    /// </summary>
    /// <param name="containerRegistry"></param>
    public void RegisterTypes(IContainerRegistry containerRegistry)
    {
   
   
    }
}

配置Module目录

1、重写PrismApplication的ConfigureModuleCatalog方法

public partial class App : PrismApplication
{
   
   
    protected override Window CreateShell()
    {
   
   
        return Container.Resolve<MainWindow>();
    }

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
   
   

    }

    protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
    {
   
   
        //添加模块A
        moduleCatalog.AddModule<ModuleAModule>();
    }
}

2、Directory配置模块目录

通过读取根目录Modules文件夹查找模块

public partial class App
{
   
   
    protected override IModuleCatalog CreateModuleCatalog()
    {
   
   
        return new DirectoryModuleCatalog() {
   
    ModulePath=@".\Modules" };
    }
}

3、App.Config配置模块目录

public partial class App
{
   
   
    protected override IModuleCatalog CreateModuleCatalog()
    {
   
   
        return new ConfigurationModuleCatalog();
    }
}

然后,为应用程序添加配置文件app.config, 添加以下内容:

<configuration>
    <configSections>
        <section name="modules" type="Prism.Modularity.ModulesConfigurationSection, Prism.Wpf" />
    </configSections>
    <startup>
    </startup>
    <modules>
        <module assemblyFile="ModuleA.dll" moduleType="ModuleA.ModuleAModule, ModuleA, Version=1.0.0.0, Culture=neutral,PublicKeyToken=null" moduleName="ModuleAModule" startupLoaded="True" />
    </modules>
</configuration>

4、XAML配置模块目录

修改CreateModuleCatalog方法,从指定XAML文件读取模块配置

public 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值