.NET MAUI中MainDisplayInfoChanged事件调用不一致问题
MAUI特定页面屏幕旋转事件触发异常问题
问题背景
此问题为Stack Overflow相关问题的延续,需求是在MAUI应用的特定视图中,支持设备旋转时自动切换横屏布局,实现特定页面重新启用自动旋转功能。
当前实现代码
目前通过页面的OnAppearing和OnDisappearing方法控制Android平台的屏幕方向:
object SOToRestore { get; set; } protected override void OnAppearing() { base.OnAppearing(); #if ANDROID SOToRestore = Microsoft.Maui.ApplicationModel.Platform.CurrentActivity.RequestedOrientation; Microsoft.Maui.ApplicationModel.Platform.CurrentActivity.RequestedOrientation = Android.Content.PM.ScreenOrientation.Landscape; #endif } protected override void OnDisappearing() { base.OnDisappearing(); #if ANDROID if (SOToRestore is Android.Content.PM.ScreenOrientation SO) Microsoft.Maui.ApplicationModel.Platform.CurrentActivity.RequestedOrientation = Android.Content.PM.ScreenOrientation.Portrait; #endif }
异常现象
期望通过MainDisplayInfoChanged事件响应屏幕旋转,更新视图内容,但存在特定场景下事件不触发的问题:
- 当设备处于侧放状态但前一视图为竖屏时,打开目标视图,视图成功旋转为横屏,但
MainDisplayInfoChanged事件未被调用。 - 该问题仅在返回前一页后再次打开目标视图时出现,首次加载不会触发。
- 经确认,
MainDisplayInfo实际已变更:OnAppearing中打印为竖屏(Portrait),页面加载完成后手动点击按钮打印为横屏(Landscape),但期间事件未触发。
复现步骤
- 启动应用,将手机/模拟器转为横屏模式,此时应用处于侧放状态;
- 点击按钮打开响应式视图,屏幕正确旋转,标签显示Landscape模式;
- 点击返回按钮,点击查询按钮确认当前视图Orientation为Portrait;
- 再次点击按钮打开响应式视图,此时标签显示Portrait,但Orientation实际为Landscape,且
MainDisplayInfoChanged全程未触发。
补充尝试
尝试在前一视图设置RequestedOrientation后再导航至目标视图,问题仍未解决,推测是MainDisplayInfo.Orientation被强制设置但未触发对应事件。
内容的提问来源于stack exchange,提问作者GChapX
相关产品推荐
相关产品推荐

