棱镜嵌套区域

时间:2013-09-18 15:30:13

标签: wpf prism

我在主窗口中定义了一些区域,我已经在每个区域成功填充了一个视图。现在事实证明,我需要将所有区域最小化为一个“窗口”,以便能够最大化另一个“窗口”。

我在想我应该创建一个区域作为父母,使所有这些区域成为这个区域的孩子,以便能够将它们控制为一个“窗口”。这是正确的方法吗?我该怎么做?

<Window>
    <DockPanel LastChildFill="True">   
        <telerik:RadDocking x:Name="DockingControl" prismrgn:RegionManager.RegionName="{x:Static Common:RegionNames.MainRegion}">
            <telerik:RadSplitContainer InitialPosition="DockedLeft">
                <telerik:RadPaneGroup AutomationProperties.AutomationId="{x:Static Common:RegionNames.LeftAutoHide}" prismrgn:RegionManager.RegionName="{x:Static Common:RegionNames.LeftAutoHide}"/>
                <telerik:RadPaneGroup AutomationProperties.AutomationId="{x:Static Common:RegionNames.LeftRegion}" prismrgn:RegionManager.RegionName="{x:Static Common:RegionNames.LeftRegion}"/>
            </telerik:RadSplitContainer>

            <telerik:RadSplitContainer InitialPosition="DockedRight" Orientation="Vertical">
                <telerik:RadPaneGroup prismrgn:RegionManager.RegionName="{x:Static Common:RegionNames.TopRightRegion}"/>
                <telerik:RadPaneGroup prismrgn:RegionManager.RegionName="{x:Static Common:RegionNames.BottomRightRegion}"/>
            </telerik:RadSplitContainer>
        </telerik:RadDocking>
    </DockPanel>
</Window>

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您可能希望Navigate覆盖MainRegion中注册的观看次数,以便停用第一个View并激活下一个this.RegionManager.RegisterViewWithRegion("MainRegion", typeof(MainView));

所以你的第一种方法是正确的,虽然 Shell 中定义的 Window 只会声明主要区域所在的视图导航到然后将被注册。

<Window>
    <DockPanel>
        <TabControl Name="MainRegion" cal:RegionManager.RegionName="MainRegion"/>
    </DockPanel>
</Window>

外壳视图如下所示:

IRegionManager scopedRegionManager = mainRegion.Add(objectView, null, 
                            true);
scopedRegionManager.Regions["TopRightRegion"].Add(subView);

您提到的主视图中的其他区域将在适当的 MainRegion 注册视图中定义,其中包含它们。但是,如果您计划浏览同一视图的不同实例,则应了解为每个导航视图创建范围内的区域管理器,以便仅将子区域隔离到该视图中。

您可以按如下方式为指定的视图创建作用域区域管理器,然后注册属于每个子区域的视图:

{{1}}

您可以在以下 Prism 指南章节中找到 UI合成查看导航的更多信息:

希望这有帮助。

答案 1 :(得分:0)

由于没有人回答,我最终使用区域管理员来关闭所有区域

regionManager.Regions[regionname].Remove(view);

因此整个“窗口”。然后我也使用regionmanager

打开了新的“窗口”
regionManager.RequestNavigate(...);