You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows 10 UWP应用方向固定实现:仅单页面横屏其余竖屏

实现UWP应用默认竖屏、单个页面强制横屏的正确方案

嘿,我明白你的需求了——整个应用默认锁竖屏,唯独某一个页面要强制横屏显示。你之前的思路方向是对的,但问题出在清单文件的设置上,咱们来一步步调整:

第一步:修正清单文件的方向权限

你之前只勾选了「Portrait」,这会让系统直接限制整个应用只能竖屏运行,后续代码里的旋转设置会被系统忽略。正确的做法是:

  • 打开Package.appxmanifest,在「应用 UI」选项卡的「支持的旋转」里,把所有方向都勾选上(Portrait、Landscape、LandscapeFlipped、PortraitFlipped)。
  • 这一步是给代码控制旋转留足权限,咱们后续用代码来锁定默认方向。

第二步:设置应用默认竖屏

App.xaml.csOnLaunched方法里,添加代码让应用启动后默认锁定竖屏:

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

火山引擎 最新活动