2010-05-07 29 views
1

我们拥有基于NavigationWindow的“传统”WPF应用程序。该NavigationWindow有一个相当大的ControlTemplate,其容纳ContentPresenter像这样:在现有导航窗口中添加PRISM区域管理器

<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的根选项卡控件,但是我无法让它工作。有任何想法吗?

回答

0

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

0

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

现在,staright向上选项卡控件w/no模板我能够工作得很好,但回想起需要编写一个知道如何处理目标区域类型的内容适配器,并在启动之前在引导程序中注册该适配器模块加载。

+0

在渲染完成后,是否可以将区域附加到选项卡? – 2010-05-07 19:34:55

+0

你可以 - 但你必须得到正在使用的区域管理器的句柄,所以如果你只有1个(例如全局的),它会使它更容易。您可以创建该选项卡,然后在事实之后通过代码将其指定为区域的目标,以便加载模块然后遍历它们,并为每个模块创建选项卡,分配名称,然后将该选项卡注册为一个地区的中央地区经理。我认为你可能仍然需要一个内容适配器,这样prizm就知道如何把传入的内容放在一起。 – 2010-05-07 19:42:33

+0

我应该提到,自从我上一次使用它以来,prizm已经经历了一次彻底改革 - 我不确定内容适配器范例是否仍然存在,但在那时您是如何管理视图的。那时可以动态地注册地区 - 我们做了广泛的评估。 – 2010-05-07 19:44:20