2012-02-02 2 views
1

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

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

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


Чтобы быть ясно, на этом ...

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

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

ответ

2

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


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

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

+0

спасибо - но вы только получите это, если поддерживаете более портретную ориентацию. (Я тоже пробовал это сделать, а затем не передал сообщение в базовый класс ... это стало беспорядочным!) – Stuart

+0

А интересно, я думал, что он сработает, даже если 'SupportedOrientation' не установлен. 'Происходит после поворота телефона или свойства SupportedOrientations. ' – keyboardP

+1

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

0

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

+0

спасибо - но я хочу, чтобы указать Портрет только в supportedorientations, если я могу - в этом случае я не получаю эти события. – Stuart

+0

hmm, в этом случае я думаю, вам нужно будет запросить значения с акселерометра. –

0

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

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); 
    } 

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

1

Это может помочь, но для случая, когда вы попадаете на эту страницу, а не на начальную страницу - так что отчасти ответьте на вопрос. Он запускает 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> 

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

Это уменьшает размер изображения в ландшафтном режиме, когда ввод страницы!

Есть решение, в конце концов, после того, как увидел Jeff Prosises site

Смежные вопросы