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

如何在MAUI Shell导航返回后恢复窗口初始高度?

解决Window高度无法恢复的问题

以下几个方案可以解决你遇到的问题:

方案1:关闭模态页面前直接恢复高度

在NewDb页面的返回按钮点击事件中,先把Window高度改回800,再执行返回操作,回到初始页面时高度就已经恢复:

private async void BackBtn_Clicked(object sender, EventArgs e)
{
    Window.Height = 800;
    await Shell.Current.Navigation.PopAsync();
}

方案2:在初始页面监听导航完成事件

在初始页面的构造函数中注册Shell的导航事件,当导航回到当前页面时设置高度,同时记得在页面销毁时取消注册避免内存泄漏:

public InitialPage()
{
    InitializeComponent();
    Shell.Current.Navigated += Shell_Navigated;
}

private void Shell_Navigated(object sender, ShellNavigatedEventArgs e)
{
    // 判断当前是否回到初始页面(替换成你初始页面的路由或名称)
    if (e.Current.Location.ToString().Contains("InitialPage"))
    {
        Window.Height = 800;
    }
}

protected override void OnDisappearing()
{
    base.OnDisappearing();
    Shell.Current.Navigated -= Shell_Navigated;
}

方案3:重写初始页面的OnNavigatedTo方法

替换OnAppearing,改用OnNavigatedTo方法设置高度,这个方法会在导航完全完成后触发,时机更可靠:

protected override void OnNavigatedTo(NavigatedToEventArgs args)
{
    base.OnNavigatedTo(args);
    Window.Height = 800;
}

为什么OnAppearing无效?

OnAppearing的触发时机早于导航完成的时机,此时Window的状态还没完成切换,导致修改高度的操作被覆盖或不生效,换用上述时机更稳妥。

内容的提问来源于stack exchange,提问作者user22995906

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 02:32:43