我在如何实现导航到未在 shell 视觉层次结构中表示的页面(在我的 Shell xaml 中定义)时遇到问题。
根据我在 docs 中读到的有关 Shell 导航的内容,我可以通过两种方式导航到这样的页面:
- 使用导航属性:
Navigation.PushAsync(new TargetPage());
- 注册路由并使用 Shell 的 URI 导航:
Routing.RegisterRoute("targetPageRoute", typeof(TargetPage));
Shell.Current.GoToAsync("targetPageRoute");
两种方法都遇到相同的问题:一旦您使用任何一种方法导航到视觉层次结构之外的页面,Shell 的 flyoutItems 之间的正常导航(使用弹出菜单)将使应用程序崩溃并出现以下错误:
System.Collections.Generic.KeyNotFoundException: The given key 'MyProject.TargetPage' was not present in the dictionary.
如何重现:
向 Shell 的视觉层次结构添加两项:
<FlyoutItem Title="page 1"> <Tab> <ShellContent> <local:Page1 /> </ShellContent> </Tab> </FlyoutItem> <FlyoutItem Title="page 2"> <Tab> <ShellContent> <local:Page2 /> </ShellContent> </Tab> </FlyoutItem>
- 使用本文顶部描述的两种导航方式之一,使用 Page1 上的按钮导航到 Page3(上面未定义的页面):
private void Button_Clicked(object sender, EventArgs e) { Navigation.PushAsync(new Page3()); }
- 使用弹出菜单导航到第 2 页
- 使用弹出菜单导航到 Page1 - 应用程序现在应该崩溃。
我已经在我的主要项目和一个小型测试项目中对此进行了广泛的测试,但似乎找不到解决方案。任何帮助将不胜感激。