Добавить PRISM Region Manager в существующее окно навигации
У нас есть "устаревшее" приложение WPF, основанное на NavigationWindow. NavigationWindow имеет довольно большой шаблон ControlTemplate, который содержит ContentPresenter следующим образом:
<ControlTemplate>
....snip...
<ContentPresenter x:Name="PART_NavWinCP" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
.....snip....
</ControlTemplate>
Мы хотим использовать ContentPresenter в качестве первой вкладки и динамически добавлять другие вкладки во время выполнения. Как это:
<ControlTemplate>
....snip...
<TabControl Background="Transparent" cal:RegionManager.RegionName="MainRegion" Grid.ColumnSpan="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<TabItem Header="Nav Window Content">
<ContentPresenter x:Name="PART_NavWinCP" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
</TabItem>
</TabControl>
.....snip....
</ControlTemplate>
Затем наши модули захватывают RegionName и вставляют их содержимое динамически. Кажется, проблема в том, что менеджеру региона PRISM не нравится, что наш код находится в ContentTemplate и не может разрешить регион. Я попытался обновить RegionManager, динамически добавив Region, просто имея элемент управления с корневой вкладкой без ContentPresenter, но я не могу заставить это работать. Есть идеи?
2 ответа
Таким образом, мы обошли это путем изменения NavigationWindow во фрейм и удаления содержимого во фрейме. Нам нужно сделать немного стайлинга, чтобы он выглядел хорошо; однако это единственный способ обойти использование региона в шаблоне содержимого NavigationWindow. Теперь мы удаляем весь код из фрейма, который был общим для приложения и который потребуется Shell (поскольку NavigationWindow не может стать Shell).
Области в шаблонах представляют собой проблему - поскольку шаблоны отображаются после исходного содержимого, они не являются "элементами управления" или даже сами по себе экземплярами, а менеджер области не может справиться с этим. я бы предположил, что добавление региона таким образом не будет поддерживаться.
Теперь, с самого начала управления вкладками без шаблонов, я смог нормально работать, но вспомнил, что мне нужно было написать адаптер содержимого, который знал, как обрабатывать тип целевого региона, и зарегистрировать его в загрузчике до того, как я загрузил модуль.