C# Xamarin Forms中返回HomePage时如何销毁takePhotosPage?
解决MAUI Shell中返回主页时销毁当前页面的问题
方案一:使用PopAsync()返回(推荐)
如果登录后已将LoginPage从导航栈清除,当前栈结构为HomePage → takePhotosPage,直接调用PopAsync()就能返回HomePage并自动销毁takePhotosPage:
// 在takePhotosPage的返回按钮点击事件中 await Shell.Current.Navigation.PopAsync();
这种方式会把takePhotosPage从导航栈中移除,页面会触发Disappearing和Unloaded事件,最终被垃圾回收销毁。
方案二:使用绝对路由并清除栈
若你坚持用绝对路由//HomePage,可通过导航参数清除HomePage之上的所有页面:
await Shell.Current.GoToAsync($"//{nameof(HomePage)}", new ShellNavigationParameters { { "ClearStack", true } });
该参数会让Shell导航到HomePage时,清除栈中HomePage上方的所有页面(包括takePhotosPage),达到销毁效果。
前置操作:确保登录后HomePage成为导航栈根
为避免返回时跳回LoginPage,登录成功跳转HomePage时需清除LoginPage的栈:
// LoginPage中登录成功后执行跳转 await Shell.Current.GoToAsync($"//{nameof(HomePage)}", new ShellNavigationParameters { { "ClearStack", true } });
方案三:手动从导航栈移除页面
如果以上方法不适用,可在takePhotosPage的OnNavigatedFrom事件中手动移除自身:
protected override void OnNavigatedFrom(NavigatedFromEventArgs args) { base.OnNavigatedFrom(args); // 判断目标页面为HomePage时执行移除 if (args.Target is HomePage) { if (Shell.Current.Navigation.NavigationStack.Contains(this)) { Shell.Current.Navigation.RemovePage(this); } } }
内容的提问来源于stack exchange,提问作者F205
相关产品推荐
相关产品推荐

