Xamarin形式的不同导航类型

时间:2017-11-25 11:25:42

标签: xamarin xamarin.forms

Xamarin.Forms中这两种导航范例之间有什么区别?

await Navigation.PushModalAsync(new Dashboard());

await Navigation.PushModalAsync(new NavigationPage(new Dashboard()));

2 个答案:

答案 0 :(得分:4)

什么是模态页面

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

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

Android用户可以使用硬件返回按钮来关闭模态页面。

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

示例

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

UI差异

使用await Navigation.PushModalAsync(new Dashboard());会模拟显示Dashboard页面,但新的网页不会拥有NavigationBar。

enter image description here

使用await Navigation.PushModalAsync(new NavigationPage(new Dashboard()));也会模拟显示Dashboard页面,但新的 会有一个NavigationBar。

enter image description here

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

修改

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

请注意Xamarin.Forms.INavigation使用两个不同的堆栈ModalStackNavigationStack,这一点很重要。 Navigation.PushModalAsyncPage添加ModalStackNavigation.PushAsyncPage添加NavigationStack

要从Page中弹出ModalStack,您需要使用Navigation.PopModalAsync(),而使用Navigation.PopAsync()Page中删除NavigationStack {1}}。

答案 1 :(得分:-1)

首先,在"模式中推送页面"方式(顶部没有导航栏) 第二个...是一个错误,因为你试图将导航页面添加到导航堆栈,但我认为这是不可能的......