Добавить 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).

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

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

Другие вопросы по тегам