2012-02-02 5 views
1

저는 현재 초상 전용 앱을 쓰고 있습니다. 전화가 켜져있는 경우 특별한 기능을 구현하고 싶다는 고객 요구 사항이 있습니다.내 오리엔테이션이 무엇인지 알아내는 방법이 있습니까?

그들은 페이지의 방향을 바꾸기를 원치 않으므로 페이지를 세로로 유지하면 여기에서 잘 작동하지만 옆으로 바뀌는 것을 감지 할 수 있기를 원합니다.

루트 프레임이나 다른 객체에서 찾아 낼 수 있습니까? 아니면 가속도계 데이터에 액세스하여 직접 해결해야합니까? 나는 항상 세로 페이지를 유지하기 위해 노력하고있어


  • 는 ... 이것에 분명합니다.
  • 내가 SupportedOrientations = "portraitorlandscape"라고 지정하면 페이지를 세로로 유지하는 것이 어려워 보입니다. (틀렸을 때 정정하십시오.하지만 초상화에 머물고 싶지는 않습니다. MS SDK도 있습니다. 페이지 이동 풍경)
  • 및을 잘 나는 SupportedOrientations이 = "portraitorlandscape는"그때는 페이지 또는의 RootFrame 중 하나에 OnOrientationChanged에 전화를하지 않는 지정하지 않은 경우

등 케이크 위에 장식하기 ... 세로 모드로 유지하려면 전화가 필요합니다. - 화면 상단 (세로 위쪽)에 머무르기 위해 SystemTray가 필요합니다.

답변

2

당신은 PageOrientation 열거를 반환합니다 OnOrientationChanged 이벤트를 처리 할 수 ​​있습니다.


때문에 의견이 접수 :

@Stuart -이 스타터 키트의 방향 도우미 클래스가 유용 할 수있다. 그것은 가속도계를 사용하기 때문에 당신이 그것을 사용해야 할 것 같아요,하지만 그것은 자신의 버전을 밖으로 압연하는 시간을 절약 할 수 있습니다 : http://msdn.microsoft.com/en-us/library/gg442298%28VS.92%29.aspx#Customizing_Behavior

+0

감사합니다.하지만 세로 방향 이상을 지원하는 경우에만 표시됩니다. (나는이 일을 시도한 다음 기본 클래스로 메시지를 전달하지 않았다 ... 그것은 지저분 해졌다.) – Stuart

+0

흥미로운 점은, 'SupportedOrientation'이 설정되지 않아도 재미있을 것이라고 생각했다. '전화가 회전되거나 SupportedOrientations 속성이 변경된 후에 발생합니다. ' – keyboardP

+1

@Stuart -이 스타터 키트의'오리엔테이션 도우미 '클래스가 유용 할 수 있습니다. 그것은 가속도계를 사용하므로, 당신이 그것을 사용해야 할 것 같아요,하지만 그것은 자신의 버전을 밖으로 압연하는 시간을 절약 할 수 있습니다 : http://msdn.microsoft.com/en-us/library/gg442298%28VS.92% 29.aspx # Customizing_Behavior – keyboardP

0
+0

감사를 본 후에, 마지막으로 솔루션을 얻었다 -하지만 난 내가 할 수있는 경우에만 supportedorientations에 세로를 지정하려면 -이 경우 내가 그 이벤트를 수신하지 않습니다. – Stuart

+0

흠, 그 경우에는 가속도계의 값을 쿼리해야한다고 생각합니다. –

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를 trigs합니다! (이 솔루션은 2 일 동안 솔루션을 찾으려고 시도한 후에 나타납니다.) :

특정 페이지에서 작성하십시오. 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 
     } 
} 

하에 물품, I는 화상 배치 :

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

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

..로드 중 다른 코드 다음에, 그 동안에 실시간 이미지가 표시됩니다 ...

이렇게하면 가로 모드에서 이미지 크기가 줄어 듭니다. 페이지 입력!

Jeff Prosises site

관련 문제