Определить текущую ориентацию - PullRequest
3 голосов
/ 20 декабря 2011

Я бы хотел определить текущую ориентацию устройства в приложении WP7.Я не хочу обрабатывать событие OrientationChange, потому что мне нужна текущая ориентация при открытии страницы.

Я пытался сделать это с помощью этого кода, который я нашел на форуме:

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

Однако, это всегда возвращается с PortraitUp, даже если я поворачиваю устройство вбок.И, кстати, я пытаюсь сделать это с эмулятором, так что это может быть ошибка эмулятора.

Спасибо

Ответы [ 5 ]

4 голосов
/ 20 декабря 2011

Только что протестировал его на эмуляторе и на моем устройстве. В эмуляторе, как будто Марк упоминает, что он всегда возвращает PotraitUp.

Однако, если я проверю его на своем устройстве, правильная ориентация будет возвращена напрямую. Так что, вероятно, Марк предполагает, что это ошибка эмулятора.

3 голосов
/ 19 февраля 2013

Это сработало для меня .. и сработало отлично .. надеюсь, это поможет другим ..

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 голосов
/ 04 января 2012

Что я узнал об этом: ((PhoneApplicationFrame)Application.Current.RootVisual).Orientation не имеет правильной ориентации в PageLoaded.

Она также не возвращает правильную ориентацию в первом событии LayoutUpdated.Однако есть второе событие LayoutUpdated, в котором оно выдает правильное.А между двумя событиями LayoutUpdated, если последняя страница была в другой ориентации, то также будет происходить событие OrientationChanged.

Таким образом, для меня не было никакого другого решения, кроме как ожидать события OrientationChanged (потому чтоединственная страница, на которую пользователь может перейти на эту страницу, поддерживает только портретный режим).

0 голосов
/ 08 декабря 2013

Решение:

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

  if (currentOrientation == PageOrientation.PortraitUp)
  {
    // Do something...
  }
}
0 голосов
/ 20 декабря 2011

Ваше приложение должно поддерживать альбомную ориентацию, чтобы получить его.Если вы поддерживаете только Portrait, вы никогда не получите ни событие OrientationChanged, ни альбомную ориентацию в указанном свойстве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...