2012-02-02 9 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 - このスターターキットには、Orientation Helperクラスがあります。それは加速度計を使用しているので、あなたはそれを使用しなければならないと思うが、それはあなた自身のバージョンを展開する時間を節約するかもしれない:http://msdn.microsoft.com/en-us/library/gg442298%28VS.92% 29.aspx#Customizing_Behavior – keyboardP

0
+0

感謝を見た後、最終的には、ソリューションを手に入れた - しかし、私は私ができる場合にのみsupportedorientationsでポートレートを指定したい - その場合、私はこれらのイベントを受信しません。 – Stuart

+0

ええと、その場合、私はあなたが加速度計からの値を照会する必要があると思います。 –

0

私のアプリの1つで同様のことをする前に、背景は回転しませんが、ページ上の他の項目は回転します。

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は変更されていませんが、トリグです! (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

関連する問題