如何在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
相关产品推荐
相关产品推荐

