C# prism 框架

定义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>();

        }

    }

原文地址:https://www.cnblogs.com/bruce1992/p/15111945.html