假设我有一个网格,每个单元格中有2行,2列和许多控件。
当应用程序更改为捕捉模式时,我的意思是屏幕的1/3,我希望应用程序只有一个列,2行,并且只显示我将决定的一些控件。
我对此有什么样的控制?
THX
答案 0 :(得分:9)
考虑到此次活动的评论部分,使用DisplayProperties.OrientationChanged事件(由@Jan K.建议)可能并不完全符合您的要求:
DisplayProperties.OrientationChanged 事件仅在显示器或显示器的方向发生变化时发生,而不一定在应用程序的方向发生变化时发生。要确定应用的方向以进行布局,请使用ApplicationView.Value属性。
但由于{strong> Windows 8.1 版本MS建议使用 ApplicationView.GetForCurrentView(),因此ApplicationView.Value可能会被放弃:
在Windows 8.1 Preview之后,ApplicationView静态方法可能会被更改或不可用于发行版。而是使用ApplicationView.GetForCurrentView()来获取ApplicationView的实例。
所以现在我最终得到了这个代码(有一种动态视图,不幸的是不能通过VisualStateManager预先设计XAML中的所有代码):
public MainPage()
{
InitializeComponent();
Window.Current.SizeChanged += (sender, args) =>
{
ApplicationView currentView = ApplicationView.GetForCurrentView();
if (currentView.Orientation == ApplicationViewOrientation.Landscape)
{
// when args.Size.Width > args.Size.Height
}
else if (currentView.Orientation == ApplicationViewOrientation.Portrait)
{
// when args.Size.Width < args.Size.Height
}
};
}
答案 1 :(得分:8)
查看DisplayProperties.OrientationChanged
- 活动。当它触发时,您可以修改网格并重新排列控件。
答案 2 :(得分:8)
您应该在xaml中使用VisualStateManager,以获得完整的xaml解决方案:
<Grid x:Name="LayoutRoot">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="OrientationStates">
<VisualState x:Name="Full"/>
<VisualState x:Name="Fill"/>
<VisualState x:Name="Portrait"/>
<VisualState x:Name="Snapped"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Grid>
为每个VisualState创建StoryBoards并隐藏/显示xaml中的元素。 Microsoft示例使用相同的解决方案。
-
<强>更新强>
我在网上搜索并找到了正确的状态,这个链接背后有一个例子:MSDN。
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="ApplicationViewStates">
<VisualState x:Name="FullScreenLandscape"/>
<VisualState x:Name="Filled"/>
<VisualState x:Name="FullScreenPortrait"/>
<VisualState x:Name="Snapped"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
州反映了ApplicationViewState枚举。可以找到更多信息here。