我已经写了几年的Android应用程序,现在我正在开发一个Windows Store/Windows 8应用程序。
我非常困惑如何为横向和纵向方向编写不同的屏幕布局。
在Android中,我们只需要编写两个布局,一个用于纵向,另一个用于横向,遵循一些文件名约定,并且当我们旋转设备时,平台会自动更改屏幕布局。
我一直在搜索解决方案,以在我的Windows 8应用程序中实现相同的功能,但我找到的所有解决方案都是使用Visual State Groups和Visual States,将在同一XAML中发生的一些修改放入我们的小部件中,当我们旋转设备时发生变化。
例如,要使文本块在将设备旋转到纵向方向时更改其位置:
我非常困惑如何为横向和纵向方向编写不同的屏幕布局。
在Android中,我们只需要编写两个布局,一个用于纵向,另一个用于横向,遵循一些文件名约定,并且当我们旋转设备时,平台会自动更改屏幕布局。
我一直在搜索解决方案,以在我的Windows 8应用程序中实现相同的功能,但我找到的所有解决方案都是使用Visual State Groups和Visual States,将在同一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布局,还是我正在正确但困难的道路上前进?
谢谢!
if (portrait) { handle_my_gridview_portrait(); } else { handle_my_gridview_landscape(); }
这样的事情。无论如何,这比我的当前解决方案好。谢谢! - Esdras Beleza