【问题标题】:UWP navigation (Template10), Pivot control, multiple framesUWP 导航(Template10)、Pivo​​t 控件、多帧
【发布时间】:2017-01-16 11:39:29
【问题描述】:

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

在枢轴的每一帧中,我都希望有一个独立的帧,它有自己的历史记录和回栈。只有通过枢轴才能在框架之间导航。

我正在考虑使用类似于以下的代码:

<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 没有被实例化。

有什么想法吗?

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

【问题讨论】:

    标签: c# uwp template10


    【解决方案1】:

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

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

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

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

    有意义吗?

    【讨论】:

    • 嗨,Jerry,这工作正常,但我不确定在 ViewModel 中按 Frame 访问以便调用 GetForFrame 的最佳方式?目前,我正在做一件 hacky 的事情:WindowWrapper.Current().NavigationServices.FirstOrDefault(n =&gt; n.Frame.Name.Equals("PageAFrame")).Frame; 但我觉得必须有更好的方法来访问框架。有什么想法吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      相关资源
      最近更新 更多