我目前正在编写一个仅限肖像的应用程序,但我有一个客户要求他们想要实现一个特殊功能,如果手机转向它。
要明确的是他们不希望页面改变方向 - 所以保持页面作为肖像在这里运作良好 - 但他们确实希望能够检测到横向变化。
有没有找到这个(例如从rootframe或其他对象?)或者我是否必须访问Accelerometer数据并自行处理?
要清楚这一点......
作为锦上添花......我需要手机保持纵向模式 - 我需要SystemTray保持在屏幕顶部(肖像顶部)。
答案 0 :(得分:2)
您可以处理将返回OnOrientationChanged枚举的PageOrientation事件。
因为评论而接受这个:
@Stuart - 您可能会发现此入门工具包中的Orientation Helper类非常有用。它使用加速度计,所以我猜你必须使用它,但它可以节省你推出自己版本的时间:http://msdn.microsoft.com/en-us/library/gg442298%28VS.92%29.aspx#Customizing_Behavior
答案 1 :(得分: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>
..然后是其他代码,仍在加载期间图片显示...
进入页面时,在横向模式下,这会减小图像的大小!
后,最终得到了解决方案答案 2 :(得分:0)
答案 3 :(得分: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);
}
不幸的是,系统托盘或应用栏没有真正的解决方法。对于系统托盘,您可以隐藏它,然后仅在用户点击或滑动屏幕的那一部分时显示它(一段时间)。