Есть ли способ узнать, какой была бы моя ориентация? - PullRequest
1 голос
/ 02 февраля 2012

В настоящее время я пишу приложение только для портрета, но у меня есть требование к клиенту, чтобы они включили специальную функцию, если телефон повернут на бок.

Чтобы было ясно, они не хотят, чтобы страница меняла ориентацию - поэтому сохранение страницы в виде портрета здесь хорошо работает - но они хотят иметь возможность обнаруживать боковое изменение.

Есть ли какой-нибудь способ выяснить это (например, из корневого фрейма или из какого-либо другого объекта?) Или мне нужно получить доступ к данным акселерометра и самостоятельно их обработать?


Для ясности ...

  • Я пытаюсь держать страницу в портретном режиме.
  • и если я укажу SupportedOrientations = "portraitorlandscape", то удержать страницу в портретном режиме будет сложно (поправьте меня, если я ошибаюсь, но кажется, что она не хочет оставаться в портретной - MS SDK слишком хорош в оформлении страницы)
  • и если я не укажу SupportedOrientations = "portraitorlandscape", то я не получу вызовы OnOrientationChanged ни на странице, ни в RootFrame

И как глазурь на торте ... Мне нужно, чтобы телефон тоже оставался в портретном режиме - мне нужен SystemTray, чтобы оставаться в верхней части экрана (в верхней части портрета).

Ответы [ 4 ]

2 голосов
/ 02 февраля 2012

Вы можете обработать событие OnOrientationChanged , которое будет возвращать перечисление PageOrientation .


Принимая это из-за комментариев:

@ Stuart - класс «Помощник по ориентации» в этом стартовом наборе может оказаться полезным.Он использует акселерометр, так что, думаю, вам придется это использовать, но это может сэкономить ваше время на развертывание вашей собственной версии: http://msdn.microsoft.com/en-us/library/gg442298%28VS.92%29.aspx#Customizing_Behavior

1 голос
/ 08 апреля 2012

Это может помочь, но для случая, когда вы переходите на эту конкретную страницу, а не для начальной страницы - поэтому только частично отвечаете на вопрос. Он запускает OnOrientationChanged, хотя никаких изменений сделано не было! (Выяснил это решение после попытки найти решение в течение двух дней):

На конкретной странице напишите. код xaml

Orientation="None" 

На стороне .xaml.cs напишите под

InitializeComponent();

Orientation = this.Orientation;  
this.OrientationChanged += new EventHandler<OrientationChangedEventArgs>          
(OnOrientationChanged);

и отдельно

void OnOrientationChanged(object sender, OrientationChangedEventArgs e)
{
 if ((e.Orientation & PageOrientation.Landscape) != 0)
  {
            MyImage.Height = 480;  //for example
  }

        {
            MyImage.Width = 480; // for example
        }
}

В моем случае я разместил изображение следующим образом:

<Grid.RowDefinitions>
        <RowDefinition Height="Auto" /> 
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>

    <StackPanel>
         <Image x:Name="MyImage"/>
    </StackPanel>

.. сопровождается другим кодом, все еще загружается, в течение которого показывается картинка ...

Уменьшается размер изображения в ландшафтном режиме при входе на страницу!

Получил решение, наконец, увидев Джефф Prosises сайт

0 голосов
/ 03 февраля 2012

Раньше мне приходилось делать аналогичные вещи в одном из моих приложений, когда изображение, которое используется в качестве фона, не вращается, а другие элементы на странице делают это.
Код выглядит примерно так:

    protected override void OnOrientationChanged(OrientationChangedEventArgs e)
    {
        // Keep the image in the same position as in portrait
        //  But still allows other controls to rotate when orientation changes.
        switch (e.Orientation)
        {
            case PageOrientation.LandscapeRight:
                ForegroundImage.RenderTransform = new CompositeTransform { Rotation = 90 };
                ForegroundImage.RenderTransformOrigin = new Point(0.5, 0.5);
                ForegroundImage.Margin = new Thickness(158.592, -158.792, 158.592, -160.558);

                break;
            case PageOrientation.LandscapeLeft:
                ForegroundImage.RenderTransform = new CompositeTransform { Rotation = 270 };
                ForegroundImage.RenderTransformOrigin = new Point(0.5, 0.5);
                ForegroundImage.Margin = new Thickness(158.592, -158.792, 158.592, -160.558);

                break;
            default: // case PageOrientation.PortraitUp:
                ForegroundImage.RenderTransform = null;
                ForegroundImage.RenderTransformOrigin = new Point(0, 0);
                ForegroundImage.Margin = new Thickness();

                break;
        }

        base.OnOrientationChanged(e);
    }

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

0 голосов
/ 02 февраля 2012

Обнаружить изменение ориентации: http://alan.beech.me.uk/2011/04/19/detecting-orientation-change-wp7dev/

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