You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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平台上却意外显示了返回按钮:
Uwp backbutton is visible

调试与排查
  • 这个问题在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:01:49