2011-12-20 72 views
3

我想确定WP7应用程序中设备的当前方向。我不想处理OrientationChange事件,因为当打开页面时我需要当前方向。确定当前方向

我一直在试图与这一段代码我在一个论坛上发现这样做:

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

然而,这总是PortraitUp返回,即使我侧身开启设备。顺便说一句,我正在试图用模拟器来做到这一点,所以它可能是一个模拟器bug。

谢谢

+1

你在模拟器中使用键盘? http://msdn.microsoft.com/en-us/library/ff402568(v=vs.92).aspx – ChristiaanV 2011-12-20 15:32:59

+0

不,我发现已经过了一个小时的headbanging,因为OrientationChanged事件甚至没有触发。现在起作用了,事件论证会回馈正确的方向。但是,我想知道PageLoad中的方向。 – 2011-12-20 15:38:36

+1

标记,您只能在首次LayoutUpdated事件后调用Orientation属性。在页面加载事件中,它始终是PortraitUp,因为在它之后引发了OrientationChanged事件。 – Ku6opr 2011-12-20 15:52:22

回答

2

我发现了这个: ((PhoneApplicationFrame)Application.Current.RootVisual).Orientation在PageLoaded中没有正确的方向。

它不会在第一个LayoutUpdated事件中返回正确的方向。然而,还有第二个LayoutUpdated事件,它提供了正确的一个。 而在两个LayoutUpdated事件之间,如果最后一页处于另一个方向,那么还会有一个OrientationChanged事件。

因此,我没有其他解决方案,然后等待OrientationChanged事件发生(因为用户可以从这个页面支持的唯一页面只支持肖像模式)。

0

您的应用程序必须支持横向方向才能接收它。如果您只支持肖像,那么您在提供的媒体资源中永远不会获取OrientationChanged事件和横向方向。

+0

SupportedOrientations =“PortraitOrLandscape”在我的页面中设置,如果这就是你的意思。 – 2011-12-20 15:39:32

4

刚刚在模拟器和我的设备上进行了测试。在模拟器中,它就像是马克提到它总是返回PotraitUp。

但是,如果我在我的设备上测试它比直接返回正确的方向。所以可能是因为马克认为这是一个模拟器错误。

+0

很高兴听到,我将在明天测试设备,并告诉您是否有任何成功。谢谢 – 2011-12-20 15:58:36

+0

奇怪,但我的设备具有与仿真器相同的行为。只要写测试程序显示在不同事件的方向(横向模式下启动): LayoutUpdated:PortraitUp, 加载:PortraitUp, LayoutUpdated:LandscapeLeft, OrientationChanged:LandscapeLeft, LayoutUpdated:LandscapeLeft – Ku6opr 2011-12-20 16:01:54

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

很好看'Orientation'财产。帮助我很多手动调用'OrientationChanged'事件。 – Mangesh 2015-05-22 06:11:52

0

解决的办法是:

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

    if (currentOrientation == PageOrientation.PortraitUp) 
    { 
    // Do something... 
    } 
}