2012-02-02 57 views
1

我目前正在编写一个只有肖像的应用程序,但我有一个客户的要求,他们想要实现一个特殊功能,如果电话打开一边。有没有办法找出我的方向是什么?

要清楚他们不希望页面改变方向 - 所以保持页面作为肖像在这里运行良好 - 但他们确实希望能够检测横向变化。

有没有办法找到它(例如从根框架或其他对象?)还是必须访问加速度计数据并自己完成?


要明确这一点,...

  • 我试图保持页面的肖像在任何时候。
  • 如果我指定SupportedOrientations =“portraitorlandscape”,那么保持纵向页面似乎很难(纠正我,如果我错了,但它似乎不想留在肖像 - MS SDK也是善于制作页转到横向)
  • ,如果我不指定SupportedOrientations =“portraitorlandscape”那我就不在任何页面或RootFrame得到调用OnOrientationChanged

而作为蛋糕上的糖霜...我需要手机也保持肖像模式 - 我需要SystemTray留在屏幕的顶部(肖像顶部)。

回答

2

您可以处理OnOrientationChanged事件,这将返回一个PageOrientation枚举。


接受这一点,因为评论:

@Stuart - 你会发现在这个入门套件取向Helper类是有用的。它使用加速度计,所以我想你必须使用它,但它可以节省你的时间推出自己的版本:http://msdn.microsoft.com/en-us/library/gg442298%28VS.92%29.aspx#Customizing_Behavior

+0

谢谢 - 但你只会得到,如果你支持更多比肖像方向。 (我也试过这样做,然后不把消息传递给基类......它变得凌乱了!) – Stuart 2012-02-02 13:04:57

+0

啊,有趣的是,即使'SupportedOrientation'没有设置,我认为它会触发。 '在旋转手机或SupportedOrientations属性发生变化后发生。' – keyboardP 2012-02-02 13:11:06

+1

@Stuart - 您可能会发现此入门工具包中的'Orientation Helper'类有用。它使用加速度计,所以我想你必须使用它,但它可以节省你的时间推出自己的版本:http://msdn.microsoft.com/en-us/library/gg442298%28VS.92% 29.aspx#Customizing_Behavior – keyboardP 2012-02-02 13:19:16

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

相关问题