【发布时间】:2019-11-11 09:37:28
【问题描述】:
我在如何实现导航到未在 shell 视觉层次结构中表示的页面(在我的 Shell xaml 中定义)时遇到问题。
根据我读到的关于 Shell 导航in the docs 的内容,我可以通过两种方式导航到这样的页面:
- 使用导航属性:
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 页
- 使用弹出菜单导航到第 1 页 - 应用现在应该崩溃了。
我在我的主项目和一个小型测试项目中对此进行了广泛测试,但似乎找不到解决方案。任何帮助将不胜感激。
【问题讨论】:
标签: c# android xaml xamarin.forms xamarin.forms.shell