2016-07-27 105 views
3

我已经在清单中指定了Landscape和LandscapeFlipped,我知道这只是一个偏好,并且在此之上,我在App.xaml.cs的OnLaunched中添加了下面的代码。但是,当在平板电脑上进行测试时,该应用会回到肖像模式。如何在UWP应用程序中只启用横向模式?

DisplayInformation.AutoRotationPreferences = 
        DisplayOrientations.Landscape | DisplayOrientations.LandscapeFlipped; 

还有什么替代方法可以在模拟器而不是实际的平板电脑/设备上测试这个吗?

在此先感谢。

+1

很明显,你只能通过使用Interops来达到这个目的[这里](http://stackoverflow.com/a/16162546/4558029) – lokusking

+0

谢谢你的帮助。 – AbsoluteSith

+0

这部分代码在我的应用程序中没有效果。该应用程序仍在旋转。 – mbob

回答

3

由于我的意见帮你即时将其添加为答案

Reference

解决方案

[DllImport("user32.dll", EntryPoint = "#2507")] 
extern static bool SetAutoRotation(bool bEnable); 

SetAutoRotation(false); 
+0

真的没有其他办法吗?你也知道这个互通电话是否会通过商店认证吗? –

+1

此功能在任何地方都没有记录或支持。它不会通过商店认证甚至任何形式的Win32认证。请不要使用它(永远)。 MSFT保留随时删除它的权利。 –

+1

这部分解决了我的问题。它会阻挡设备上的方向,而不是应用程序。这是正确的方法吗? – mbob

0

使用了正确的API来强制UWP应用的方向,但你可以参考官方DisplayOrientations enumeration,在备注部分:

应用程序通常使用该属性的加速计的读数翻译或根据当前屏幕旋转来翻译物理按钮事件。

这意味着,这些工作,但只有当设备有加速度计,笔记本电脑甚至模拟器,他们没有任何效果。

还有什么替代方法可以在模拟器而不是实际的平板电脑/设备上测试这个吗?

不,模拟器不适合,你可以在手机或移动模拟器上进行测试。

2

首先记:在DisplayInformation.AutoRotationPreferences提供大致相同的功能Win32 SetDisplayAutoRotationPreferences函数,但DisplayInformation函数用于UWP,Win32函数用于Win32应用程序(例如HWND)。你不能在Win32应用程序中使用UWP API,反之亦然。

UWP API仅用于设备在Windows 10上处于Tablet模式时工作。自动旋转也必须由用户打开,设备需要有加速计。一般来说,您的应用程序也需要成为前台窗口才能运行。

现在您已经知道API的所有要求(顺便说一句,这是一个方向“首选项”),它是否仍然无法正常工作?目的是用户仍然控制着体验。

在某些情况下,我看到开发人员试图将此API用于自定义OEM设备,并始终在Kiosk模式下运行单个应用程序。 API是为普通应用程序场景设计的,而不是针对信息亭场景。如果您有这样的场景,那么理想情况下,您可以只描述要驱动的硬件配置(如普通的OEM设备 - 例如编写ACPI表和固件),操作系统将使用正确的方向。如果您只是构建一次性设备,则可以考虑在启动时使用SetDisplayConfig从Win32应用程序设置屏幕旋转,而不是完全依赖自动旋转。

相关问题