Xamarin.Forms Shell中处理导航工具栏返回按钮点击问题咨询
Xamarin.Forms Shell 返回按钮行为不生效的常见原因及解决方案
以下是会导致你提供的代码失效的常见场景及对应解决方法:
- 页面未通过Shell路由导航加载
只有通过Shell.Current.GoToAsync()路由跳转加载的页面,BackButtonBehavior才会生效。如果你是使用传统的Navigation.PushAsync()、或者直接将页面嵌套在NavigationPage中加载,Shell的返回按钮配置不会作用到导航栏上。 - 代码执行时机不对
页面构造函数执行时,当前页面还未被挂载到Shell的导航树中,此时调用Shell.SetBackButtonBehavior关联的对象可能未被正确绑定到Shell导航栏。建议将配置代码移动到OnAppearing生命周期方法中执行,可添加标识避免重复设置:private bool _backBtnSet = false; protected override void OnAppearing() { base.OnAppearing(); if (!_backBtnSet) { Shell.SetBackButtonBehavior(this, new BackButtonBehavior { Command = new Command(async () => await Shell.Current.DisplayAlert("Back","Back","Back") ) }); _backBtnSet = true; } } - Xamarin.Forms版本存在已知Bug
低于5.0版本的Xamarin.Forms对BackButtonBehavior的支持存在大量兼容性问题,尤其是安卓平台下命令不触发的问题非常普遍,建议升级到Xamarin.Forms最新稳定版后再测试。 - 当前页为Shell根页面
Shell的根路由页默认不会显示导航栏返回按钮,此时设置的BackButtonBehavior自然不会触发。 - 导航栏被自定义或隐藏
如果你给页面设置了Shell.NavBarIsVisible="False"自行实现顶部导航栏,或是重写了安卓端MainActivity的OnOptionsItemSelected方法拦截了导航栏按钮点击事件,都会导致Shell默认的返回按钮行为失效。 - 非Shell承载页面
如果你的应用根视图不是Shell,而是用NavigationPage或者其他页面作为根容器,BackButtonBehavior相关API完全不会生效,这种场景需要通过NavigationPage的相关API自定义返回按钮逻辑。
内容的提问来源于stack exchange,提问作者yeetyeet
相关产品推荐
相关产品推荐

