Вопрос по wpf – WPF, Prism v2, Region в модальном диалоге, добавьте регион в коде

11

У меня есть составное приложение WPF. В одном из моих модулей я хочу создать мастера и отобразить шаги в регионе, чтобы легче переключаться между ними. Изначально этот мастер отображался в области вкладок, а вложенная область работала нормально. Теперь я хочу превратить его в модальное диалоговое окно, но после того, как я его открою, внутренняя область никогда не будет зарегистрирована администратором региона; Поэтому я не могу добавить свои шаги мастера.

У меня сложилось впечатление, что менеджер региона был глобальным, и я просто добавил cal: RegionManager.RegionName = & quot; WizardSteps & quot; сделал бы это, но, видимо, нет.

Если я передам менеджер региона в представление, я смогу использовать его ... Кто-нибудь знает, как добавить регион в ContentControl в коде позади?

Ваш Ответ

3   ответа
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);
17

что регионы ищут в визуальном дереве вложенное свойство RegionManager, а затем регистрируются в этом диспетчере. В главном окне это нормально, но в дочернем окне этого не происходит.

В Bootstrapper после создания оболочки выполняется следующий код.

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

Чтобы заставить менеджера региона работать с вашим дочерним окном, сделайте то же самое сразу после того, как вы создали окно.

РЕДАКТИРОВАТЬ

Чтобы установить имя региона элемента управления, вы также устанавливаете вложенное свойство RegionManager, например, так ...

RegionManager.SetRegionName(control, "MyRegion");

Однако вы можете сделать это и в xaml. Причина, по которой ваши регионы в отдельном окне не работают, заключается в том, что RegionManager должен быть установлен в базовом окне, как я показал выше.

Error: User Rate Limit Exceeded Shaboboo
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
7

В вашем всплывающем окне xaml добавьте имя региона, как вы это делаете в оболочке. Затем в конструкторе всплывающих окон добавьте следующий вызов:

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

Это работает для меня в Prism v.1 - не должно быть слишком большим в более поздних версиях.

Похожие вопросы