我在主窗口中定义了一些区域,我已经在每个区域成功填充了一个视图。现在事实证明,我需要将所有区域最小化为一个“窗口”,以便能够最大化另一个“窗口”。
我在想我应该创建一个区域作为父母,使所有这些区域成为这个区域的孩子,以便能够将它们控制为一个“窗口”。这是正确的方法吗?我该怎么做?
<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>
答案 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(...);