我将现有的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
定位。尽管我的代码似乎有用,但我希望在我继续之前确认这一点。
答案 0 :(得分:1)
是的,您的方法是正确的。正如documentation所述:
模板10依赖于每个XAML帧控件来配置模板10导航服务
因此,应该允许导航的每个Frame
都应该创建一个导航服务。
为给定框架创建导航服务后,会对其进行注册,然后GetNavigationService
扩展方法会通过实例检索它(请参阅source code)。