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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 06:36:16