Как проверить ориентацию при запуске приложения Windows Phone 8?

Интересно, как я могу проверить текущую ориентацию непосредственно при запуске (MainPage LoadedEvent).

Следующий код не работает:

    public MainPage()
    {
        InitializeComponent();

        Loaded += MainPage_Loaded;

    }

    void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
         Debug.WriteLine(Orientation);
         if (Orientation == PageOrientation.Landscape || Orientation == PageOrientation.LandscapeLeft)
             Debug.WriteLine("Simulator and Device won't jump in here on startup (always PortraitUp)...");
    }

Почему оно так себя ведет? А где правильно ориентироваться?

(Я включил SupportedOrientations="PortraitOrLandscape", и приложение с самого начала отображается в альбомной ориентации.)

Ps. Конечно, устройство и симулятор находятся в ландшафтном режиме при запуске;)


person malte    schedule 06.01.2014    source источник


Ответы (2)


Вы добавили свойство Orientation?

 <phone:PhoneApplicationPage
    x:Class="Orientation.MainPage"
    SupportedOrientations="PortraitOrLandscape" Orientation="Landscape"
    >
person d.lavysh    schedule 06.01.2014
comment
Это, кажется, дело. Я добавил (как было сказано выше) SupportedOrientations="PortraitOrLandscape"- В отличие от вашего примера у меня Orientation="Portrait". Если я изменю это на Пейзаж, у меня будет противоположная проблема, всегда показывающая альбомную ориентацию. - Каким-то образом я могу понять это поведение, потому что это местоположение по умолчанию, но мне все еще интересно, как я могу решить свою проблему? Может с другим подходом? Прямо сейчас я думаю, что может быть достаточно регистрации события OrientChanged. Но есть ли другой способ? - person malte; 07.01.2014
comment
Помогла ли вам подписка на событие OrientationChanged? - person d.lavysh; 07.01.2014
comment
Извините за задержку с ответом. Здесь происходит много всего, атм. OrientationChanged="MainPage_OnOrientationChanged" Подписка на события (в основном) работает. Но если я хочу убедиться, что это происходит только один раз при навигации по страницам, я должен добавить неприятный глобальный логический тип. Я бы очень хотел, чтобы это было сделано в конструкторе. Но я так понимаю шансов нет? :/ - person malte; 08.01.2014
comment
Можете ли вы уточнить проблему: вы хотите проверять ориентацию страницы каждый раз, когда страница была изменена (переход на другую) или вы хотите проверять ориентацию только один раз при запуске? - person d.lavysh; 08.01.2014
comment
Я не думаю, что это имеет значение. Но в моем случае я хочу проверять каждый раз, когда пользователь переходит на страницу (это главная страница, поэтому также один раз при запуске). Результатом моих попыток было то, что ориентация всегда соответствует той, которую вы указали в XAML в качестве стандарта в Constructor, Loaded-Event и OnNavigatedTo. Тем не менее, если устройство находится в противоположном положении, срабатывает OnOrientationChanged. Итак, логика может быть реализована. Я просто надеялся, что мне не понадобится эта глобальная переменная, чтобы указать, была ли это первая ориентацияChanged. - person malte; 08.01.2014

https://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CB0QFjAA&url=https%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fwindows%2Fapps%2Fjj207002%2528v%3Dvs.105%2529.aspx&ei=i95SVeCDG8XJuASUwYGYDQ&usg=AFQjCNGC1xSQUv7Ge6t0hbGP0hfdV8dYtw

Надеюсь, это то, что вы ищете

private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e)
{

if ((e.Orientation & PageOrientation.Portrait) == (PageOrientation.Portrait))
{
    // if portrait
}

else
{
   // If landscape
}
} 

в вашем следующем коде xaml:

 <phone:PhoneApplicationPage
x:Class="Orientation.MainPage"
SupportedOrientations="PortraitOrLandscape" Orientation="Landscape"
>

include OrientationChanged="PhoneApplicationPage_OrientationChanged"

     <phone:PhoneApplicationPage
              x:Class="Orientation.MainPage"
                SupportedOrientations="PortraitOrLandscape"                  
                OrientationChanged="PhoneApplicationPage_OrientationChanged"
        >
person Vinod Kulkarni    schedule 13.05.2015