我们拥有基于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的根选项卡控件,但是我无法让它工作。有任何想法吗?
在渲染完成后,是否可以将区域附加到选项卡? – 2010-05-07 19:34:55
你可以 - 但你必须得到正在使用的区域管理器的句柄,所以如果你只有1个(例如全局的),它会使它更容易。您可以创建该选项卡,然后在事实之后通过代码将其指定为区域的目标,以便加载模块然后遍历它们,并为每个模块创建选项卡,分配名称,然后将该选项卡注册为一个地区的中央地区经理。我认为你可能仍然需要一个内容适配器,这样prizm就知道如何把传入的内容放在一起。 – 2010-05-07 19:42:33
我应该提到,自从我上一次使用它以来,prizm已经经历了一次彻底改革 - 我不确定内容适配器范例是否仍然存在,但在那时您是如何管理视图的。那时可以动态地注册地区 - 我们做了广泛的评估。 – 2010-05-07 19:44:20