У меня есть небольшой инструмент, подобный Windows Control Panel. Инструмент позволяет нам управлять пользователями, настраивать базы данных, управлять сценариями, и т.д. Домашняя страница представляет все sub категории приложения. Когда Вы нажимаете на ссылку, она загружает представление этой категории в правильной панели и небольшие левые телевикторины задачи, доступные для этой категории. Простой.
В основном то, что я хочу сделать, должно иметь "contextalized" строку состояния. Если Вы находитесь в представлении, где Вы должны быть соединены, строка состояния должна показать, что Вы заявляете. Если Вы находитесь в представлении, где информация должна быть отображена, я хочу его в своей строке состояния.
Я уже поместил a Region
(названный StatusBarRegion для строки состояния в моей оболочке. Для каждого модуля я зарегистрировал StatusBarView этого модуля на регионе оболочки.
Теперь, я хочу обработать изменение контекста. Я должен активировать хорошее представление, когда время.
Но каждый раз я пытаюсь разрешить StatusBarRegion, это не может быть найдено в регионах менеджера региона.
Посмотрите,
var region = _regionManager.Regions[.RegionNames.StatusBarRegion];
region.Activate(_container.Resolve<StatusBarView>());
Регион является всегда пустым. Почему это?
Спасибо за внимание.
Причина, по которой регион был нулевым? Этот фрагмент кода использовался в методе Initialize модуля Module , поэтому пользовательский интерфейс еще не был создан.
Я до сих пор не понимаю, как я буду это делать, чтобы лучше всего управлять панелями состояния.
Дважды проверьте значение RegionNames.StatusBarRegion
, если оно уже совпадает с целевым регионом в вашей оболочке.
Если это так, то регион не должен быть нулевым, я думаю, за исключением того, что вы поместили свой дескриптор в модель представления / представления модуля и не получили диспетчер регионов и контейнер в конструкторе.
Допустим, это обработано в вашем представлении SilverlightUserControl1
. Конструктор может быть таким:
private readonly IRegionManager _regionManager;
private readonly IUnityContainer _container;
public SilverlightUserControl1(IRegionManager regionManager, IUnityContainer container)
{
_regionManager = regionManager;
_container = container;
}
private Button1_Click(object sender, RoutedEventArgs e)
{
var statusBarView = _container.Resolve<StatusBarView>();
statusBarRegion = _regionManager.Regions["StatusBarRegion"];
statusBarRegion.Add(statusBarView, "StatusBarView");
statusBarRegion.Activate(statusBarView);
// or you could remove all views in `ActiveViews` and add the view then
// (no need to activate)
}