Xamarin形式的不同类型的导航

Gan*_*gm7 2 xamarin xamarin.forms

Xamarin.Forms中的这两个Navigation范例之间有什么区别?

await Navigation.PushModalAsync(new Dashboard());

await Navigation.PushModalAsync(new NavigationPage(new Dashboard()));
Run Code Online (Sandbox Code Playgroud)

Bra*_*ick 5

什么是模态页面

Navigation.PushModalAsync会导致新内容Xamarin.Forms.Page以模态显示,这意味着其动画将从屏幕底部开始,覆盖上一个当前页面,并且不包含后退按钮。

在iOS上,用户将无法向左滑动以返回上一页。

Android用户可以使用硬件后退按钮关闭模式页面。

当您希望用户有意识地决定关闭页面时,模态页面很有用。

当iOS用户填写表单并向左滑动以返回时,它是保存表单还是丢弃表单?用户不清楚。为了使UX更加直观,您应该模态显示表单

用户界面差异

使用await Navigation.PushModalAsync(new Dashboard());将以Dashboard模态显示页面,但是新页面将没有 NavigationBar。

在此处输入图片说明

使用await Navigation.PushModalAsync(new NavigationPage(new Dashboard()));Dashboard将以模态显示页面,但是新页面具有NavigationBar。

在此处输入图片说明

示例应用程序源代码:https : //github.com/brminnick/XamList

编辑

@AlessandroCaliaro和我在下面他的回答的评论中进行了很好的讨论:

重要的是要注意Xamarin.Forms.INavigation使用两个不同的堆栈,ModalStackNavigationStackNavigation.PushModalAsync添加PageModalStackNavigation.PushAsync添加PageNavigationStack

并弹出一个PageModalStack,你需要使用Navigation.PopModalAsync(),而你可以使用Navigation.PopAsync()删除PageNavigationStack