7

在我的应用程序中,所有的东西都只处于横向模式。我不希望应用程序在纵向模式下运行。如何限制方向?

谢谢。

4

3 回答 3

4

如此链接中所述,应用程序的方向限制首选项设置仅在具有受支持的硬件加速计的 Windows 8 系统上强制执行。这意味着除非 Windows 通过支持的传感器知道系统如何定位,否则它不会尝试切换到应用程序的首选方向。

所以这一切都取决于用户的硬件。

于 2012-09-27T08:10:43.623 回答
4

我遇到了这个问题,并且我想将我的游戏限制为仅横向模式。我把它放在 App.xaml 的 OnLaunched 处理程序中:

        Windows.Graphics.Display.DisplayProperties.AutoRotationPreferences =
            Windows.Graphics.Display.DisplayOrientations.Landscape;

但是我注意到在模拟器中它似乎忽略了这一点,而在我测试的硬件平板电脑上它似乎表现得很好。AutoRotationPreferences 是位标志,因此您可以或一起使用您想要允许的所有方向。

于 2012-10-16T16:47:16.223 回答
0

对于希望回答这个问题的人不编写 Metro 应用程序(您可以在清单中设置首选方向或有权访问Windows.Graphics.Display.DisplayProperties.AutoRotationPreferences)...

没有真正的方法可以不让方向改变,但是如果您对只允许 Landscape 感兴趣,您可以执行以下操作:

查看型号:

Microsoft.Win32.SystemEvents.DisplaySettingsChanged += new           
    EventHandler(SystemEvents_DisplaySettingsChanged);
}

public bool IsLandscape { get; set; }

void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e)
{
  if (SystemParameters.PrimaryScreenWidth > SystemParameters.PrimaryScreenHeight)
  {
      IsLandscape = true;
  }
  else
  {
      IsLandscape = false;
  }

  RaisePropertyChanged( "IsLandscape" );
}

在您的主 Window.xaml 中:

<Border >
    <Border.Style>
        <Style TargetType="{x:Type Border}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsLandscape}" Value="False">
                    <Setter Property="LayoutTransform">
                        <Setter.Value>
                            <RotateTransform Angle="90"/>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
         </Style>
    </Border.Style>

///The rest of your controls and UI

</Border>

所以我们实际上并没有限制方向,我们只是注意到它何时发生,并重新旋转我们的 UI,使其看起来仍然处于纵向模式 :) 这主要是针对非 Metro Win 8 应用程序和/或应用程序在 Win 7 平板电脑上运行。

于 2014-10-23T18:57:40.930 回答