0

我需要导航到一个页面,该页面将具有外壳弹出菜单,但我不需要它作为菜单中的项目出现。

我试过路由页面

Routing.RegisterRoute("cart", typeof(Cart));

然后使用

Shell.Current.GoToAsync("///cart");

但它会抛出一个错误,告诉我堆栈中唯一的页面。Microsoft 文档没有帮助。

全局路由当前不能是堆栈上的唯一页面,因此不支持到全局路由的绝对路由。现在,只需导航到:购物车/

当我尝试

Shell.Current.Navigation.PushAsync(new NavigationPage(new Cart()));

它有效,但顶部栏是默认颜色,菜单按钮不存在。另外,我尝试将购物车作为新页面推送,没有new NavigationPage(),topbar 没有变化,但是 menubutton 可以作为 BackButton,即使我设置了 Behavior

<Shell.BackButtonBehavior>
        <BackButtonBehavior IconOverride="back.png"/>
</Shell.BackButtonBehavior>
4

3 回答 3

4

使用Shell.Current.GoToAsync只会在导航堆栈中推送另一个页面,

如果你想使用 shell 导航到另一个导航页面,你可以创建另一个 shell 文件,例如。AppShell.xaml(默认为shell),只需将您的MainPage更改为

Application.Current.MainPage = new NewAppShell();
于 2019-12-02T08:13:26.723 回答
0

这在我的情况下有效:

// without parameter
await Shell.Current.GoToAsync("//cart");
// or with parameter
await Shell.Current.GoToAsync($"//cart?item=12345");
于 2022-01-29T02:00:37.727 回答
0

原因:

您的路径///cart无效。全球路线目前不能是导航堆栈上的唯一页面。因此,不支持到全局路由的绝对路由。

解决方案:

也可以通过将有效的相对 URI 指定为 GoToAsync 方法的参数来执行导航。路由系统将尝试将 URI 与 ShellContent 对象匹配。因此,如果应用程序中的所有路由都是唯一的,则可以通过仅将唯一的路由名称指定为相对 URI 来执行导航:

await Shell.Current.GoToAsync("cart");
于 2019-11-20T12:18:59.190 回答