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

}

}

C# prism 框架的更多相关文章

  1. WPF Step By Step 系列-Prism框架在项目中使用

    WPF Step By Step 系列-Prism框架在项目中使用 回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Pr ...

  2. WPF Prism框架下基于MVVM模式的命令、绑定、事件

    Prism框架下的自定义路由事件和命令绑定 BaseCode XAML代码: <Button x:Class="IM.UI.CommandEx.PrismCommandEx" ...

  3. 在Prism 框架中,实现主程序与模块间 UI 的通信

    背景: 在模块的UI中包含 TreeView 控件,在该树形控件的每一节点前面定义了一个复选框,如图 需求: 在两个不同的应用程序中使用该控件,而它在不同应用程序中的外观则并不一致,按照本例,即一个显 ...

  4. Prism框架研究(一)

    从今天起开始写一个Prism框架的学习博客,今天是第一篇,所以从最基本的一些概念开始学习这个基于MVVM的框架的学习,首先看一下Prism代表什么,这里引用一下比较官方的英文解释来看一下:Prism ...

  5. Prism框架中加载类库中时其中第三方类dll提示无法加载程序集

    Prism框架是采用一种依赖注入的方式动态加载程序集,能够在程序需要加载的时候将程序集注入到里面去,实现程序的热插拔效果,而且采用这种框架能够让我们进行一个大项目的独立开发,在最近的一个项目中在独立开 ...

  6. 项目中使用Prism框架

    Prism框架在项目中使用   回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Prism框架来构建基础的应用框架,并且 ...

  7. Prism框架在项目中使用

    本文大纲 1.Prism框架下载和说明 2.Prism项目预览及简单介绍. 3.Prism框架如何在项目中使用. Prism框架下载和说明 Prism框架是针对WPF和Silverlight的MVVM ...

  8. Prism框架的Module(模块化)编程

    Prism框架用的是新版本的,Prism7.1.关于其中的变动,感兴趣的参考https://www.cnblogs.com/hicolin/p/8694892.html 如何告诉Shell(我们的宿主 ...

  9. Prism框架实战——订餐软件

    参考B站刘铁猛老师的订餐软件https://www.bilibili.com/video/av29782724?from=search&seid=6787438911056306128 环境: ...

  10. Prism框架的Regions使用

    Prism框架的Regions,可以把用户控件.窗体等附加到主窗体指定的控件中. [实战1] 1.新建Prism Blank App(WPF) 项目:Demo0810 Views文件夹处,鼠标右键—— ...

随机推荐

  1. Js中关于构造函数,原型,原型链深入理解

    在 ES6之前,在Javascript不存在类(Class)的概念,javascript中不是基于类的,而是通过构造函数(constructor)和原型链(prototype chains)实现的.但 ...

  2. 「CF643G」 Choosing Ads

    「CF643G」 Choosing Ads 传送门 如果你知道摩尔投票法可以扩展事实上是个一眼题,又好写又好调. 首先摩尔投票法是用来求众数定义为超过所有数个数一半的数的一个算法. 大致算法流程: 将 ...

  3. 「SPOJ 3105」Power Modulo Inverted

    「SPOJ 3105」Power Modulo Inverted 传送门 题目大意: 求关于 \(x\) 的方程 \[a^x \equiv b \;(\mathrm{mod}\; p) \] 的最小自 ...

  4. Linux bash命令行常用快捷键(Xshell和secure CRT以及gnome-terminal)

    常用的命令行击键操作 ctrl + insert   xshell中复制,可以设置选中内容自动复制ctrl shift + c crt中复制shift + insert xshell中粘贴ctrl s ...

  5. ECMAScript 2020(ES11)新特性简介

    目录 简介 动态imports import.meta export加强 BigInt matchAll() globalThis Promise.allSettled() ??操作符 ?.操作符 总 ...

  6. AHKManager.ahk AHK管理器 2019年12月15日

    AHKManager.ahk  AHK管理器  2019年12月15日 快捷键   {Alt} + {F1} ///////////////////////////////////////////// ...

  7. 遥远的国度 (树链剖分换根),洛谷P3979

    析:显然,若没有换根操作,则为树链剖分板子题,但是这道题我们考虑换根操作 考虑这样一个性质:在一棵树上,两点的距离路径是唯一的!! 也就是说,我们在修改路径上的点权时,不必考虑根在哪里,直接利用模板修 ...

  8. Hotel 旅馆, 线段树查询,合并

    C. Hotel 旅馆 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较   题目描述 OIER最近的旅游计划,是到长春净月潭,享受那里的湖光山色, ...

  9. openssl not found 离线安装的openssl问题

    离线安装问题 正常我们在Linux中按照 nginx的openssl依赖都是通过 yum来安装的,但是由于一些特殊的服务器公司不让服务器连接互联网,所以就导致我们必须通过离线方式来进行安装,但是我们离 ...

  10. python3中的希尔排序

    def shell_sort(alist): n = len(alist) # 初始步长 gap = round(n / 2) while gap > 0: # 按步长进行插入排序 for i ...