确定当前方向

时间:2011-12-20 15:26:15

标签: windows-phone-7 mobile windows-phone-7.1

我想确定WP7应用中设备的当前方向。我不想处理OrientationChange事件,因为我在页面打开时需要当前的方向。

我一直试图用我在论坛中找到的这段代码来做到这一点:

((PhoneApplicationFrame)Application.Current.RootVisual).Orientation

然而,即使我将设备侧向转动,这也始终与PortraitUp一起返回。顺便说一下,我试图用模拟器做这个,所以它可能是一个模拟器bug。

由于

5 个答案:

答案 0 :(得分:4)

只是在模拟器和我的设备上测试过它。在模拟器中,它就像Mark一样,它总是返回PotraitUp。

但是,如果我在我的设备上测试它,则直接返回正确的方向。所以可能正如马克暗示这是一个模拟器错误。

答案 1 :(得分:3)

这对我有用..而且它工作得很完美..希望这有助于其他人......

PageOrientation orient = Orientation;
CheckOrientation(orient);

上面的代码获取当前页面的方向。用你班上的方法来称呼它。然后,您可以执行以下

private void CheckOrientation(PageOrientation orient)
    {
        if (orient == PageOrientation.LandscapeLeft || orient == PageOrientation.LandscapeRight)
        {
            //Do your thing
        }
        else if (orient == PageOrientation.PortraitUp || orient == PageOrientation.PortraitDown)
        {
            //Do your thing
        }
    }

答案 2 :(得分:2)

我发现了这个: ((PhoneApplicationFrame)Application.Current.RootVisual).Orientation在PageLoaded中没有正确的方向。

它也没有在第一个LayoutUpdated事件中返回正确的方向。但是,还有第二个LayoutUpdated事件,它提供了正确的事件。 在两个LayoutUpdated事件之间,如果最后一页是另一个方向,那么也会有一个OrientationChanged事件。

所以没有其他解决方案让我等待OrientationChanged事件发生(因为用户可以从仅支持Portrait模式进入此页面的唯一页面)。

答案 3 :(得分:0)

您的应用程序必须支持横向方向才能接收它。如果你只支持肖像,那么你所提供的属性中你永远不会得到,也不会支持OrientationChanged事件和横向。

答案 4 :(得分:0)

解决方案是:

public YourPhonePage()
{
  InitializeComponent();
  Microsoft.Phone.Controls.PageOrientation currentOrientation = (App.Current.RootVisual as PhoneApplicationFrame).Orientation;

  if (currentOrientation == PageOrientation.PortraitUp)
  {
    // Do something...
  }
}