UWP导航(Template10),数据透视控件,多个帧

时间:2017-01-13 21:16:20

标签: c# uwp template10

我试图在我的UWP应用程序中实现以下导航方式(使用Template10),但我正在努力如何将多个帧用作独立的历史堆栈。

Side-by-side

在枢轴的每个框架内,我想要一个独立的框架,它拥有自己的历史和后台堆栈。只能通过枢轴在帧之间导航。

我在考虑使用类似下面的代码:

<Pivot>
   <PivotItem Header="PageA">
      <Frame x:Name="PageAFrame" />
   </PivotItem>
   <PivotItem Header="PageB">
      <Frame x:Name="PageBFrame" />
   </PivotItem>
   <PivotItem Header="PageC">
      <Frame x:Name="PageCFrame" />
   </PivotItem>
</Pivot>

但是,我不确定如何实际实现导航。我尝试过使用类似下面的代码,但没有运气:

var nav = Template10.Services.NavigationService.NavigationService.GetForFrame(PageAFrame);

nav始终为空。

我也尝试过:

PageAFrame.Navigate(typeof(PageA));

但我的ViewModel没有实例化。

有什么想法吗?

注意:我没有使用汉堡包菜单的原因是因为我需要能够在枢轴之间进行切换,但仍保留每个菜单的独立历史堆栈。

2 个答案:

答案 0 :(得分:2)

嵌套帧很好。多帧是T10明确支持的重要用例,但人们认识到开箱即用支持单帧,多帧需要开发人员代码。

从概念上讲,T10创建一个包装每一帧的NavigationService。创建的第一个NavService会自动附加到应用程序后退按钮,但开发人员可以使用NavigationServiceFactory中的参数重新分配或关闭此项。

  

https://github.com/Windows-XAML/Template10/blob/master/Template10%20(Library)/Common/Bootstrapper/BootStrapper.cs#L278

对于您介绍的每个框架,您需要使用工厂方法创建关联的NavigationService。这样做会将其注册到T10并使其正常工作。话虽如此,您的应用程序中的工作流程现在取决于您。请记住,而不是Frame.Navigate()总是使用NavigationService.Navigate()并使用GetForFrame()访问NavigationService,就像您指示的那样。

有意义吗?

答案 1 :(得分:0)

Template10导航服务负责应用程序的根框架,它不知道您的嵌套框架。所以我给你的建议(这就是我所做的)是手动处理嵌套框架导航,不要浪费你的时间试图在Template10中找到一种方法。