在Template10

时间:2018-02-05 17:08:59

标签: uwp template10

我将现有的UWP应用移植到Template10。该应用程序将汉堡包菜单实现为自定义shell,它具有本机Template10汉堡包菜单模板的所有功能,但也有很多特定于我的应用程序的东西,因此我不想使用由库并继续使用现有的shell。

在shell中有一个名为Frame的{​​{1}}对象应该处理所有页面导航。不知何故,我需要为框架获得一个ContentFrame对象。经过一些游戏后(我没有找到任何关于使用自定义shell和NavigationService的全面文档)我得到了它的工作,但我不完全确定原因:

INavigationService

如果我忽略public override UIElement CreateRootElement(IActivatedEventArgs e) { _shell = new Shell(); NavigationServiceFactory(BackButton.Attach, ExistingContent.Exclude, _shell.ContentFrame); return new ModalDialog { Content = _shell }; } public override async Task OnStartAsync(StartKind startKind, IActivatedEventArgs args) { var navService = _shell.ContentFrame.GetNavigationService(); navService?.NavigateAsync(typeof(TestPage)); } 的电话,则代码无效。那么,你是否应该在创建需要NavigationService的NavigationServiceFactory()时调用它?工厂是否创建某种全局NavigationService,以后可以使用Frame定位。尽管我的代码似乎有用,但我希望在我继续之前确认这一点。

1 个答案:

答案 0 :(得分:1)

是的,您的方法是正确的。正如documentation所述:

  

模板10依赖于每个XAML帧控件来配置模板10导航服务

因此,应该允许导航的每个Frame都应该创建一个导航服务。

为给定框架创建导航服务后,会对其进行注册,然后GetNavigationService扩展方法会通过实例检索它(请参阅source code)。