Xamarin Forms中Navigation.PopAsync()无法正常工作的问题求助
解决Xamarin.Forms中TabbedPage内Push MasterDetailPage后PopAsync无响应的问题
这个问题我之前也碰到过,核心原因是你调用PopAsync()的上下文不对,下面给你两种可行的解决办法:
方法一:改用模态方式打开MasterDetailPage
这是最简单直接的方案,把原来的PushAsync换成PushModalAsync,这样MasterDetailPage会以模态窗口的形式打开,关闭时用PopModalAsync()就能回到原来的ContentPage:
修改打开MasterDetailPage的代码:
// 替换原来的PushAsync为PushModalAsync await Navigation.PushModalAsync(new AttendMasterPage(new AttendanceViewModel(item)));
在Detail页完成操作后返回:
// 调用PopModalAsync关闭模态页面,回到Tab内的原ContentPage await Navigation.PopModalAsync();
方法二:明确指定操作外层导航栈
如果你一定要用PushAsync的方式打开MasterDetailPage,那需要确保你是在Tab内ContentPage的导航栈上执行PopAsync,而不是MasterDetailPage内部的导航栈。可以通过获取上层导航实例来实现:
在Detail页的返回按钮点击事件中添加:
// 获取作为主页的TabbedPage var mainTabbedPage = App.Current.MainPage as TabbedPage; if (mainTabbedPage != null) { // 获取当前选中的Tab对应的NavigationPage var currentNavPage = mainTabbedPage.CurrentPage as NavigationPage; if (currentNavPage != null) { // 在这个导航栈上执行PopAsync,回到原ContentPage await currentNavPage.PopAsync(); } }
为什么原来的PopAsync()没反应?
因为你的AttendMasterPage作为MasterDetailPage,它的Detail页大概率是一个NavigationPage,当你在Detail页里直接调用Navigation.PopAsync()时,操作的是Detail页自己的内部导航栈,而不是你之前Push MasterDetailPage的那个Tab内ContentPage的导航栈,所以自然没有任何反应。
内容的提问来源于stack exchange,提问作者the_tr00per
相关产品推荐
相关产品推荐

