定义Region (RegionManager)

定义Region 的方式有两种,一个是在XMAL界面指定,另一种这是代码当中指定。

RegionManager.RegionName(XMAL)

RegionManager.SetRegionName (Code)

 

RegionManager 除了定义区域,还有一下功能:

维护区域集合

提供对区域的访问

合成视图

区域导航

定义区域

-----------------------------------------------------------------------------------

xml 文件

<ContentControl prism:RegionManager.RegionName="ContentRegion" />
 
C# code
 
 public MainWindow(IRegionManager regionManager)
        {
            InitializeComponent();
            _regionManager = regionManager;
            _regionManager.RegisterViewWithRegion("MainStack", typeof(Login));
            this.Loaded += MainWindow_Loaded; this.Loaded += MainWindow_Loaded;
        }---------------------

自定义adapter

 

public class StackPanelAdapter : RegionAdapterBase<StackPanel>
    {
          protected StackPanelAdapter(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);
                            }

                      }
                };           }
          protected override IRegion CreateRegion()
          {
                return new Region();
          }
    } 
app  code 注册Adaptor
 
   public partial class App
    {
        protected override Window CreateShell()
        {
            return Container.Resolve<MainWindow>();
        }
 
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            // containerRegistry.RegisterForNavigation<Login>();
            //containerRegistry.RegisterForNavigation<CreateAccount>();
        }
   protected override void ConfigureRegionAdapterMappings(RegionAdapterMappings AdapterMappings)
        {
            base.ConfigureRegionAdapterMappings(AdapterMappings);
            AdapterMappings.RegisterMapping(typeof(StackPanel),Container.Resolve<StackPanelAdapter>());
        }
    }
 
-----------------------------------------
页面的跳转
 protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
              containerRegistry.RegisterForNavigation<PageA>();
              containerRegistry.RegisterForNavigation<PageB>();
        } private void Button_Click(object sender, RoutedEventArgs e)
        {
              _regionManager.RequestNavigate("MainRegion", "PageA");
        } 
module 的使用
 public class MainModuleModule : IModule
    {
          public void OnInitialized(IContainerProvider containerProvider)
          {
                var _RegionManager=containerProvider.Resolve<IRegionManager>();
                var region=  _RegionManager.Regions["MainRegion"];                region.RequestNavigate("ViewA");
          }          public void RegisterTypes(IContainerRegistry containerRegistry)
          {
                containerRegistry.RegisterForNavigation<ViewA>();
          }
    }--------------------------------------------------------------------------------------------
 
 public partial class App
    {
        protected override Window CreateShell()
        {
            return Container.Resolve<MainWindow>();
        }
 
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            containerRegistry.RegisterForNavigation<PageA>();
            containerRegistry.RegisterForNavigation<PageB>();
        }
        protected override void ConfigureRegionAdapterMappings(RegionAdapterMappings AdapterMappings)
        {
            base.ConfigureRegionAdapterMappings(AdapterMappings);
            AdapterMappings.RegisterMapping(typeof(StackPanel),Container.Resolve<StackPanelAdapter>());
 
 
        }
        protected override IModuleCatalog CreateModuleCatalog()
        {
            return new ConfigurationModuleCatalog(); //目录创建于配置文件
        }
        protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
        {
            moduleCatalog.AddModule<MainModule.MainModuleModule>();
        }
    }