2011-12-20 13 views
3

WP7アプリでデバイスの現在の向きを確認したいと思います。 OrientationChangeイベントを処理する必要はありません。ページが開かれているときに現在の向きが必要なためです。現在の向きを確認する

私はフォーラムで見つけたコードのこの作品でそれをやろうとしてきた:

((PhoneApplicationFrame)Application.Current.RootVisual).Orientation 

しかし、これは常に私が横にデバイスの電源を入れた場合でも、PortraitUpで返します。そして、私はエミュレータでこれをやろうとしているので、エミュレータバグかもしれません。

ありがとうございます。

+1

あなたはエミュレータで、キーボードを使用していますか? http://msdn.microsoft.com/en-us/library/ff402568(v=vs.92).aspx – ChristiaanV

+0

いいえ、OrientationChangedイベントが発生しなかったため、1時間のヘッドバンギングの後に既に見つかりました。それは今動作し、イベント引数は正しい向きを返す。しかし、私はPageLoadで向きを知りたい。 –

+1

Mark、Orientationプロパティは、最初のLayoutUpdatedイベントの後にのみ呼び出すことができます。 Loadedイベントのページでは、OrientationChangedイベントが後に発生するため、常にPortraitUpになります。 – Ku6opr

答えて

2

私がこれについて知ったこと: ((PhoneApplicationFrame)Application.Current.RootVisual).Orientationは、PageLoadedで正しい向きを持っていません。

最初のLayoutUpdatedイベントで正しい向きが返されません。ただし、2番目のLayoutUpdatedイベントがあり、正しいイベントが返されます。 2つのLayoutUpdatedイベントの間に、最後のページが別の方向にあった場合は、OrientationChangedイベントも発生します。

したがって、OrientationChangedイベントが発生するのを待っている私にとっては他に解決策はありませんでした。ユーザーがこのページに来ることができるページはポートレートモードのみです。

0

アプリケーションは、受信するために横向きの向きをサポートしている必要があります。ポートレートのみをサポートしている場合、提供されたプロパティでは決して取得することも、OrientationChangedイベントや横向きの方向付けも行いません。

+0

SupportedOrientations = "PortraitOrLandscape"が自分の意図したものであれば、私のページに設定されています。 –

4

エミュレータとデバイスでテストしました。エミュレータではMarkがいつもPotraitUpを返すようになっているようです。

しかし、デバイスでテストした場合、正しい向きが直接返されます。おそらくMarkがそれがエミュレータのバグだと示唆しています。

+0

聞いてよかったら、明日はデバイスでテストし、成功したかどうかを確かめます。ありがとう –

+0

奇妙な、私のデバイスエミュレータと同じ動作があります。 LayoutUpdated::ちょうど異なるイベント(ランドスケープモードで起動)の配向を示してテストアプリケーションを書くPortraitUp、 はロード:PortraitUp、 LayoutUpdated:LandscapeLeft、 はOrientationChangedを:LandscapeLeft、 LayoutUpdatedは: 'Orientation'プロパティを参照するには良い – Ku6opr

3

これは...私のために働いたし、それは完全に働いた。..上記のコードは、現在のページの向きを取得します

PageOrientation orient = Orientation; 
CheckOrientation(orient); 

。これは他の人に役立ちます願っています。あなたのクラスの方法でそれを呼び出します。その後、あなたは以下の

private void CheckOrientation(PageOrientation orient) 
    { 
     if (orient == PageOrientation.LandscapeLeft || orient == PageOrientation.LandscapeRight) 
     { 
      //Do your thing 
     } 
     else if (orient == PageOrientation.PortraitUp || orient == PageOrientation.PortraitDown) 
     { 
      //Do your thing 
     } 
    } 
+0

をLandscapeLeft 。 OrientationChangedイベントを手動で呼び出す手助けをしてくれました。 – Mangesh

0

を実行できるソリューションです:

public YourPhonePage() 
{ 
    InitializeComponent(); 
    Microsoft.Phone.Controls.PageOrientation currentOrientation = (App.Current.RootVisual as PhoneApplicationFrame).Orientation; 

    if (currentOrientation == PageOrientation.PortraitUp) 
    { 
    // Do something... 
    } 
} 
関連する問題