WPF, Prism v2, Region in a modal dialog, add region in code behind

∥☆過路亽.° 提交于 2019-12-17 18:55:26

问题


I have a composite WPF application. In one of my modules I want to make a wizard and have the steps show up in a region so I can switch between the steps easier. Originally I had this wizard showing up in a tab region and the nested region worked fine. Now I want to make it into a modal dialog box, but after I open it the inner region never gets registared with the region manager; So I can't add my wizard steps.

I was under the impression that the region manager was global, and just adding cal:RegionManager.RegionName="WizardSteps" would do it, but apparently not.

If i pass the region manager to the view I might be able to use it...Does anyone know how to add a region to a ContentControl in code behind?


回答1:


The problem is that regions search up the visual tree for the RegionManager attached property, and then register themselves with that manager. In the main window that's fine, but in a child window this doesn't happen.

In the Bootstrapper, after the shell is created, the following code is performed.

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

To get the region manager to work with your child window do the same thing right after you've created the window.

EDIT

To set the region name of a control, you also set the attached property of the RegionManager, like so...

RegionManager.SetRegionName(control, "MyRegion");

However you can do this in xaml aswell. The reason why your regions in a separate window don't work is because the RegionManager needs to be set on the base window, like I showed above.




回答2:


It is actually quite simple.

In your popup xaml add a regionname as you do in the shell. Then in the popups constructor, add the following call:

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

This works for me in Prism v.1 - shouldn't be too much different in later versions.




回答3:


I found something thats almost working. I'm sure if i could bind the region's active view to the contentContol's content property then it would work, but I haven't managed that yet.

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);


来源:https://stackoverflow.com/questions/1014948/wpf-prism-v2-region-in-a-modal-dialog-add-region-in-code-behind

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!