12

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

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

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

4

3 回答 3

18

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

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

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

要让区域管理器与您的子窗口一起工作,请在创建窗口后立即执行相同的操作。

编辑

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

RegionManager.SetRegionName(control, "MyRegion");

但是,您也可以在 xaml 中执行此操作。单独窗口中的区域不起作用的原因是需要在基本窗口上设置 RegionManager,就像我在上面展示的那样。

于 2009-06-19T17:05:51.140 回答
9

其实很简单。

在您的弹出 xaml 中添加一个区域名称,就像您在 shell 中所做的那样。然后在弹出窗口构造函数中,添加以下调用:

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

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

于 2010-03-30T07:03:43.287 回答
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);
于 2009-06-22T15:32:55.657 回答