WPF, Призма v2, регион в модальном диалоговом окне, добавляет регион в коде позади

Вы можете использовать Thread s и Thread.join() с Handler s в качестве опции.

цитата из: https://docs.oracle.com/javase/tutorial/essential/concurrency/join.html

Метод соединения позволяет Поток ждать завершения другого. Если t является объектом Thread, поток которого в данный момент выполняется,

t.join (); заставляет текущий поток приостанавливать выполнение, пока поток t не завершится. Перегрузки соединения позволяют программисту указывать период ожидания. Однако, как и в спящем режиме, объединение зависит от ОС для синхронизации, поэтому не следует предполагать, что объединение будет ждать ровно столько времени, сколько вы укажете.

Как и sleep, join реагирует на прерывание путем выхода с InterruptedException.

РЕДАКТИРОВАТЬ : Вы также должны проверить мою диспетчер событий Гист. Вам может понравиться это.

11
задан Shaboboo 18 June 2009 в 20:22
поделиться

3 ответа

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

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

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

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

EDIT

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

RegionManager.SetRegionName(control, "MyRegion");

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

17
ответ дан 3 December 2019 в 04:33
поделиться

Я нашел кое-что, что почти работает. Я уверен, что если бы я мог привязать активное представление региона к свойству contentContol content, тогда это сработало бы, но мне это еще не удалось.

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);
0
ответ дан 3 December 2019 в 04:33
поделиться

На самом деле это довольно просто.

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

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

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

7
ответ дан 3 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

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