在Windows 8中如何处理屏幕方向

5
我想创建一个Metro Style的Windows 8应用程序,而不会旋转根Grid,并且所有内容都在Portrait模式下。我想通过CodeVisual States进行方向处理,但是当我旋转设备时,所有内容都会自动旋转并填充新的宽度和高度。
如何禁用这种旋转行为,即禁用Portrait方向,但仍能够获取有关方向更改的事件?
另外,Windows.Graphics.Display.DisplayProperties.AutoRotationPreferences似乎不起作用。

你好,你有没有更好的解决方案来解决这个问题? - asitis
3个回答

3
双击您的Metro应用项目中的“Package.appxmanifest”文件,您应该可以看到应用程序的配置。在“应用程序 UI”页面中,您可以在中间找到“支持的旋转”。您可以勾选支持的模式,并取消勾选“纵向”模式。然后,您的应用程序将不再接收任何“纵向”模式事件。
如果您编写自己的appx清单,可以在
下添加以下块,如下所示:
    <InitialRotationPreference>
      <Rotation Preference="landscape" />
      <Rotation Preference="portraitFlipped" />
      <Rotation Preference="landscapeFlipped" />
    </InitialRotationPreference>

谢谢您的回答。问题是我需要接收方向更改事件,但在方向更改时禁用自动更改布局。 - Ku6opr
还要注意的是模拟器不会遵守这些设置。你必须在实际设备上测试!天知道为什么。希望微软能解决这个问题。 - NER1808

0

抱歉,我错过了您的主要问题。我认为在纵向模式事件之后,您无法更改根元素的“旋转”。因为它实际上相对于屏幕没有旋转,但屏幕大小已经改变。

然而,我想您仍然希望用户在纵向模式事件之后以横向模式查看您的应用程序。您可以抵消所感知到的旋转。您可以将业务逻辑放在另一个没有预定义大小的用户控件中。将此用户控件放在根页面中。当您收到纵向模式事件时,您将页面的ActualWidth分配给用户控件高度,将页面的ActualHeight分配给用户控件宽度,然后给用户控件一个90度的渲染变换和渲染变换中心x=height*0.707/width,y=0.5,那么用户控件应该只需对齐到横向模式位置即可。


之前我考虑过这种方法,但旋转后在侧面会出现裁剪掉的控件。也许存在一些解决方法,但简短的研究没有给我结果。 - Ku6opr

0
当Windows显示你处于纵向模式时,向根元素添加一个旋转变换,以抵消这个效果并保持渲染为纵向。

但是根元素填充新的布局大小,即heightwidth被交换,旋转后根元素将不会占用所有可用空间,并且在两侧裁剪。 - Ku6opr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接