【问题标题】:WPF, Prism v2, Region in a modal dialog, add region in code behindWPF,Prism v2,模式对话框中的区域,在代码后面添加区域
【发布时间】:2017-08-30 15:30:42
【问题描述】:

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

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

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

【问题讨论】:

    标签: wpf prism composite


    【解决方案1】:

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

    在Bootstrapper中,shell创建完成后,执行如下代码。

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

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

    编辑

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

    RegionManager.SetRegionName(control, "MyRegion");
    

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

    【讨论】:

    • 这段代码似乎对我没有任何帮助,我的 regionmanager 似乎没有名为 SetRegionManager() 或 UpdateRegions() 的函数。有没有办法在代码后面创建一个新区域?
    • 这些是对 RegionManager 类的静态调用,而不是实例方法。此外,我将更新我的答案以展示如何在代码中创建区域。
    • 感谢您指出RegionManager设置区域名称的静态方法。这正是我想要的!
    【解决方案2】:

    其实很简单。

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

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

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

    【讨论】:

      【解决方案3】:

      我发现了一些几乎可以工作的东西。我确定如果我可以将该区域的活动视图绑定到 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);
      

      【讨论】:

        猜你喜欢
        • 2014-05-29
        • 2012-07-25
        • 1970-01-01
        • 2013-10-31
        • 1970-01-01
        • 1970-01-01
        • 2011-08-28
        • 1970-01-01
        • 2016-07-29
        相关资源
        最近更新 更多