繁体   English   中英

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

[英]Add PRISM Region Manager In Existing Navigation Window

我们有一个基于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的根选项卡控件,但是我无法使它正常工作。 有任何想法吗?

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

现在,使用没有模板的无标签选项卡控件可以正常工作,但是回想一下需要编写一个内容适配器,该适配器知道如何处理目标区域类型并将其注册到引导程序中,然后再执行模块加载。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM