我一直在编写Android应用程序几年,现在我正在开发Windows应用商店/ Windows 8应用程序。开发Windows 8商店应用程序时处理不同的方向
我很困惑如何编写横向和纵向的不同屏幕布局。
在Android中,我们所要做的只是编写2个布局,一个用于纵向,另一个用于横向,遵循文件名的一些名称约定,当我们旋转设备时,平台会自动更改屏幕布局。
我一直在搜索一些解决方案,在Windows 8应用程序中做同样的事情,我发现的所有解决方案都是使用视觉状态组和视觉状态的解决方案,将相同的XAML进行一些修改,发生在我们的我们旋转设备时的小部件。
例如,为了使文本块改变其位置,当我旋转设备为纵向:
<VisualState x:Name="FullScreenPortrait" >
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Grid.ColumnSpan)" Storyboard.TargetName="GridViewTitle">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<x:Int32>3</x:Int32>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Margin)" Storyboard.TargetName="GridViewTitle">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Thickness>0,10,10,807</Thickness>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
它看起来并不很干净,简单的我,即使这样做,使用Visual Studio的拖放小部件以生成代码的方法我有一种印象,即必须有一些比我所做的更简单,更清洁的解决方案。
所以我的问题是:是否有任何更容易的解决方案为每个方向编写XAML布局,还是我正确,但艰难的方式?
谢谢!
嗯。这听起来不错,但在我的代码中,我必须处理一些gridviews的选定内容,我应该做一些像'if(portrait){handle_my_gridview_portrait(); } else {handle_my_gridview_landscape(); }'。无论如何,这比我目前的解决方案要好。谢谢! – 2013-05-10 20:38:15
以上示例仅显示如何以不同方式检测方向更改。但是,您可以更改DataContext中的值并使用Binding来避免代码隐藏。 – kimsk 2013-05-10 21:45:25
这两个问题的答案都很好,但你的问题更适合我的问题。谢谢,并为延迟感到抱歉! – 2013-06-06 14:13:22