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

时间:2009-06-18 20:15:25

标签: wpf prism composite

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

我的印象是区域经理是全局的,只是添加cal:RegionManager.RegionName =“WizardSteps”会这样做,但显然不是。

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

3 个答案:

答案 0 :(得分:17)

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

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

RegionManager.SetRegionManager(shell, this.Container.Resolve<IRegionManager>());
RegionManager.UpdateRegions();

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

修改

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

RegionManager.SetRegionName(control, "MyRegion");

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

答案 1 :(得分:7)

实际上非常简单。

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

public Popup(IRegionManager regionManager)
{
     InitializeComponent();
     RegionManager.SetRegionManager(this,regionManager);
}

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

答案 2 :(得分:0)

我找到了几乎可以工作的东西。我敢肯定,如果我可以将该区域的活动视图绑定到contentContol的内容属性,那么它会起作用,但我还没有完成。

IRegionManager MyRegionManager = container.Resolve<IRegionManager>();
SingleActiveRegion newRegion = new SingleActiveRegion();
MyRegionManager.Regions.Add("WizardSteps", newRegion);

//Binding
Binding myBinding = new Binding("ActiveViews");
myBinding.Source = newRegion;
view.stepControl.SetBinding(ContentControl.ContentProperty, myBinding);