Prism框架-Region笔记

RegionManager的主要功能有:

1、定义区域

2、维护区域合集 

3、提供对区域的访问

//调出区域对区域进行访问
//var region = regionManager.Regions["ContentRegion"];

4、合成视图(给区域指定视图)

5、区域导航

一、定义区域

(1)XMAL代码中直接设置,例如:

<ContentControl  prism:RegionManager.RegionName="ContentRegion" />

(2)在代码中指定,首先在XMAL代码中定义控件名称:

<ContentControl x:Name="Ctr"  />

 之后在MainWindow.cs文件中注册区域:

 public MainWindow()
 {
     InitializeComponent();
     
     RegionManager.SetRegionName(Ctr,"ContentRegion");

 }

二、向区域中注册页面

(1)如在MainWindow里边的ContentRegion区域中显示页面ViewB,可在MainWindowViewModel里添加如下代码:

 public MainWindowViewModel(IRegionManager regionManager)
 {
     this.regionManager = regionManager;
     regionManager.RegisterViewWithRegion("ContentRegion", typeof(ViewB));

     //var region = regionManager.Regions["ContentRegion"];
 }

(2)在执行命令时候切换region区域:

private void Open(string obj)
{
    regionManager.Regions["ContentRegion"].RequestNavigate(obj);
}

 其中在前端需要的位置绑定Open命令,并传递要打开页面的参数:

<Button Content="打开模块A" Margin="10" Command="{Binding OpenCommand}" CommandParameter="ViewA" />

三、为控件定义区域适配器

官方提供的适配器有:ContentControlRegionAdapter、ItemsControlRegionAdapter、SelectorRegionAdapter

 自定义区域适配器(以StackPanel为例):

(1)创建StackPanelRegionAdapter.cs类,代码如下:

using Prism.Regions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;

namespace BlankApp1
{
    public class StackPanelRegionAdapter : RegionAdapterBase<StackPanel>
    {
        public StackPanelRegionAdapter(IRegionBehaviorFactory regionBehaviorFactory) : base(regionBehaviorFactory)
        {
        }
        //处理动态设置内容的代码
        protected override void Adapt(IRegion region, StackPanel regionTarget)
        {
            //检测视图的变化
            region.Views.CollectionChanged += (s, e) =>
            {
                //动态添加
                if(e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
                {
                    foreach(FrameworkElement item in e.NewItems) 
                    {
                        regionTarget.Children.Add(item); // Add the new view to the StackPanel
                    }
                }
            };
        }
        //创建一个Region区域
        protected override IRegion CreateRegion()
        {
            return new Region();
        }
    }
}

 (2)在App.xmal.cs中在初始化时将区域适配器添加进去

protected override void ConfigureRegionAdapterMappings(RegionAdapterMappings registrationAdapterMappings)
{
    base.ConfigureRegionAdapterMappings(registrationAdapterMappings);
    //动态添加一个区域适配器
    registrationAdapterMappings.RegisterMapping(typeof(StackPanel),Container.Resolve<StackPanelRegionAdapter>());
}

刚开始看,如有漏洞,欢迎补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值