1

我们有一个基于 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,动态添加区域,只是有一个没有 ContentPresenter 的根选项卡控件,但我无法让它工作。有任何想法吗?

4

2 回答 2

0

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

于 2010-05-10T18:38:36.363 回答
0

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

现在,没有模板的直接选项卡控件我能够正常工作,但回想一下需要编写一个内容适配器,它知道如何处理目标区域类型并在我加载模块之前在引导程序中注册它。

于 2010-05-07T19:28:37.847 回答