Windows 10 UWP应用方向固定实现:仅单页面横屏其余竖屏
实现UWP应用默认竖屏、单个页面强制横屏的正确方案
嘿,我明白你的需求了——整个应用默认锁竖屏,唯独某一个页面要强制横屏显示。你之前的思路方向是对的,但问题出在清单文件的设置上,咱们来一步步调整:
第一步:修正清单文件的方向权限
你之前只勾选了「Portrait」,这会让系统直接限制整个应用只能竖屏运行,后续代码里的旋转设置会被系统忽略。正确的做法是:
- 打开
Package.appxmanifest,在「应用 UI」选项卡的「支持的旋转」里,把所有方向都勾选上(Portrait、Landscape、LandscapeFlipped、PortraitFlipped)。 - 这一步是给代码控制旋转留足权限,咱们后续用代码来锁定默认方向。
第二步:设置应用默认竖屏
在App.xaml.cs的OnLaunched方法里,添加代码让应用启动后默认锁定竖屏:
protected override void OnLaunched(LaunchActivatedEventArgs e) { // 保留你原有的初始化代码... // 设置应用默认竖屏 DisplayInformation.AutoRotationPreferences = DisplayOrientations.Portrait; }
第三步:处理目标横屏页面
在需要横屏的页面里,我们要在进入页面时强制切换横屏,离开页面时恢复竖屏,避免影响其他页面:
protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); // 设置当前页面支持左右横屏(如果只需要固定某一种横屏,只写对应的枚举值即可) DisplayInformation.AutoRotationPreferences = DisplayOrientations.Landscape | DisplayOrientations.LandscapeFlipped; // 强制触发屏幕旋转(部分设备需要通过全屏模式来激活旋转) var currentView = ApplicationView.GetForCurrentView(); if (currentView.IsFullScreenMode) { currentView.ExitFullScreenMode(); } currentView.TryEnterFullScreenMode(); } protected override void OnNavigatedFrom(NavigationEventArgs e) { base.OnNavigatedFrom(e); // 离开页面后恢复默认竖屏 DisplayInformation.AutoRotationPreferences = DisplayOrientations.Portrait; }
关键说明
- 为什么之前的代码不生效?因为清单锁死了方向,系统不会响应代码里的旋转请求,必须先放开清单的限制,再用代码控制。
- 别忘了在
OnNavigatedFrom里恢复竖屏,不然用户离开这个页面后,其他页面也会保持横屏状态。 - 全屏模式的切换是为了兼容一些对旋转触发条件要求严格的设备,如果你测试时发现不加也能正常旋转,可以去掉这部分代码。
内容的提问来源于stack exchange,提问作者nsds




