WPF,Prism v2,模态对话框中的区域,在代码后面添加区域

Sha*_*boo 11 wpf prism composite

我有一个复合WPF应用程序.在我的一个模块中,我想制作一个向导并将步骤显示在一个区域中,这样我就可以更轻松地在两个步骤之间切换.最初我让这个向导显示在选项卡区域,嵌套区域工作正常.现在我想把它变成一个模态对话框,但是在打开之后,内部区域永远不会被区域管理器注册; 所以我无法添加我的向导步骤.

我的印象是区域管理器是全局的,只需添加cal:RegionManager.RegionName ="WizardSteps"就可以了,但显然不是.

如果我将区域管理器传递给视图,我可以使用它...有谁知道如何在代码后面的ContentControl中添加区域?

Cam*_*and 17

问题是区域在可视化树中搜索RegionManager附加属性,然后向该管理器注册自己.在主窗口,这很好,但在子窗口,这不会发生.

在Bootstrapper中,创建shell后,将执行以下代码.

RegionManager.SetRegionManager(shell, this.Container.Resolve<IRegionManager>());
RegionManager.UpdateRegions();
Run Code Online (Sandbox Code Playgroud)

要让区域经理使用您的子窗口,请在创建窗口后立即执行相同的操作.

编辑

要设置控件的区域名称,还要设置RegionManager的附加属性,如下所示...

RegionManager.SetRegionName(control, "MyRegion");
Run Code Online (Sandbox Code Playgroud)

但是你可以在xaml中这样做.您在单独窗口中的区域不起作用的原因是因为需要在基本窗口上设置RegionManager,如上所示.

  • 这些是RegionManager类的静态调用,而不是实例方法.另外,我将更新我的答案,以展示如何在代码中创建区域. (2认同)

Gob*_*lin 7

它实际上非常简单.

在弹出窗口中,xaml像在shell中一样添加一个regionname.然后在弹出窗口构造函数中添加以下调用:

public Popup(IRegionManager regionManager)
{
     InitializeComponent();
     RegionManager.SetRegionManager(this,regionManager);
}
Run Code Online (Sandbox Code Playgroud)

这在Prism v.1中对我有用 - 在以后的版本中不应该有太大的不同.