Xamarin.Forms模态页为何显示返回按钮?(UWP平台异常)
我做了一个指导用户操作设备移动的页面,这个页面设计成模态页,要求用户必须完成操作或者彻底取消后才能离开。
我有个带ListView的主页,点击列表项时会通过onSelect方法打开详情页,代码如下:
Navigation.PushAsync(new FooPage(string Name)); /* 当选中项不为空时在onSelect方法中调用*/
详情页的ViewModel通过传入的名称,借助Unity注入的模型管理器获取对应的数据模型。
此时导航栈里有主页和详情页,只有详情页会显示返回按钮。
在详情页点击名为“Teach”的按钮时,我调用下面的方法打开ManualTeachPage模态页:
private async Task Button_Clicked(object sender, EventArgs e) { await Navigation.PushModalAsync(new ManualTeachPage()); }
模态页能正常创建,但在UWP平台上却意外显示了返回按钮:
- 这个问题在Android平台上不存在,Android里该模态页没有可见的返回按钮或导航栏,详情页的返回按钮显示正常。
- 我之前也用过模态页但没遇到过这种情况,尝试直接调用Application.Mainpage的Navigation属性打开模态页,结果还是一样。只有切换Application.Mainpage后立刻调用PushModalAsync时,模态页才正常没有返回按钮,但后续操作仍会出现异常。
- 我在Bugzilla和网络上都没找到相关的问题报告。
注:点击TeachPage的返回按钮会回到详情页,且该页已被推入ModalStack。
更新1
确认该模态页是ModalStack中唯一的模态页,尝试了Diego Rafael Souza建议的NavigationPage.SetHasBackButton(this, false);,但没有效果。
更新2
尝试在TeachPage中重写OnBackButtonPressed方法临时禁用返回按钮,但UWP平台下该方法未触发,Android的硬件按钮则能正常触发这个方法。
更新3
试了这段代码:
SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed;
这段代码可以隐藏UWP的返回按钮,但#if WINDOWS_UWP指令无效,不加指令的话Android无法编译;而且使用该方法后,其他页面的OnBackButtonPressed也失效了。
更新4
更新到最新版Xamarin.Forms后,OnBackButtonPressed恢复生效了,不过返回按钮仍会显示,但已经被禁用。
我已经在一个小型测试项目里复现了这个问题。
内容的提问来源于stack exchange,提问作者Lloyd

