【问题标题】:Handle orientations in Windows 8在 Windows 8 中处理方向
【发布时间】:2012-04-21 14:56:06
【问题描述】:

希望创建一个 Metro 风格的 Windows 8 应用程序,该应用程序不会在 Portrait 模式下旋转根 Grid 的所有内容。我想在CodeVisual States 中处理方向,但是现在当我旋转设备时,所有内容都会自动旋转并填充新的宽度和高度。

如何禁用这种旋转行为,即禁用Portrait 方向,但仍然能够获取有关方向变化的事件?

另外,Windows.Graphics.Display.DisplayProperties.AutoRotationPreferences 似乎不起作用

【问题讨论】:

  • 您好,您有什么更好的办法解决这个问题吗?

标签: c# xaml windows-8 microsoft-metro


【解决方案1】:

双击 Metro 应用项目中的“Package.appxmanifest”文件,您应该会看到应用的配置。在“应用程序 UI”页面中,您可以在中间找到“支持的旋转”。您可以检查您支持的模式,而不要选中“纵向”模式。那么您的应用将不会再收到任何“纵向​​”模式事件。

如果您编写自己的 appx 清单,您可以在部分下添加以下块,如下所示

    <InitialRotationPreference>
      <Rotation Preference="landscape" />
      <Rotation Preference="portraitFlipped" />
      <Rotation Preference="landscapeFlipped" />
    </InitialRotationPreference>

【讨论】:

  • 感谢您的回答。问题是我需要接收方向更改事件,但是当方向更改时禁用布局中的自动更改
  • 还要注意模拟器不尊重这些设置。您必须在实际设备上测试这些!!天知道为什么。希望微软能解决这个问题。
【解决方案2】:

当 Windows 说您处于纵向模式时,向您的根元素添加一个 rotatetransform 以应对这种情况并保持呈现纵向的内容

【讨论】:

  • 但是根元素填充新的布局大小,即heightwidth被交换了,旋转后根元素不会占用所有可用空间,也会在侧面裁剪
【解决方案3】:

抱歉,我错过了您的主要问题。我认为您无法在纵向模式事件之后更改根元素的“旋转”。因为它实际上并没有相对于屏幕旋转,而是屏幕尺寸发生了变化。

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

【讨论】:

  • 我之前考虑过这种方法,但在旋转之后,我在侧面得到了裁剪控制。也许存在一些解决方法,但短期研究并没有给我一个结果。
猜你喜欢
  • 2013-11-27
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多