在现有导航窗口中添加PRISM区域管理器

时间:2010-05-07 19:14:43

标签: wpf prism navigationwindow

我们有一个基于NavigationWindow的“遗留”WPF应用程序。 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 个答案:

答案 0 :(得分:0)

模板中的区域是一个问题 - 因为模板是在初始内容之后呈现的,它们不是“控件”,甚至是实例本身,区域管理器也无法处理它。我会假设以这种方式添加区域是不可支持的。

现在,星光标签控件没有模板我能够正常工作但是回想一下需要编写一个知道如何处理目标区域类型的内容适配器并在我执行模块之前在引导程序中注册它负荷。

答案 1 :(得分:0)

所以我们通过将NavigationWindow转换为Frame并将内容放入帧中来解决这个问题。我们需要做一些造型才能让它看起来很好;但是,这是在NavigationWindow内容模板中绕过区域使用的唯一方法。我们现在从应用程序常见的框架中删除所有代码,Shell将需要这些代码(因为NavigationWindow不能成为Shell)。