2

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

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

<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>
4

2 回答 2

1

如果我理解正确,您可能需要查看Navigate在 中注册的视图MainRegion,以便第一个View停用并激活下一个。

因此,您的第一种方法是正确的,尽管在Shell中定义的Window只会声明您要导航到的视图将在其中注册的主要区域。

this.RegionManager.RegisterViewWithRegion("MainRegion", typeof(MainView));

Shell视图如下所示:

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

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

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

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

您可以在以下Prism指南章节中找到更多关于UI 组合视图导航的信息:

希望这可以帮助。

于 2013-10-03T17:10:31.337 回答
0

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

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

因此整个“窗口”。然后我也使用区域管理器打开了新的“窗口”

regionManager.RequestNavigate(...);
于 2013-09-20T13:12:43.037 回答