8

假设我有一个网格,每个单元格内有 2 行、2 列和许多控件。

当应用程序更改为快照模式时,我的意思是屏幕的 1/3 我希望应用程序只有一列、两行,并且只显示我会决定的一些控件。

我对此有什么样的控制?

谢谢

4

3 回答 3

10

您应该在 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 创建 StoryBoard,并在您的 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枚举。更多信息可以在这里找到。

于 2012-06-11T11:59:57.980 回答
9

考虑到此事件的备注部分,使用DisplayProperties.OrientationChanged事件(如@Jan K. 所建议)可能不是您正在寻找的内容:

DisplayProperties.OrientationChanged事件仅在显示器或监视器的方向发生变化时发生,而不一定在应用程序的方向发生变化时发生。要确定应用的方向以进行布局,请使用ApplicationView.Value属性。

但由于ApplicationView.Value可能会在Windows 8.1发布后被放弃 MS 建议改用ApplicationView.GetForCurrentView()

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
        }
    };
}
于 2013-08-07T16:42:33.177 回答
8

看看DisplayProperties.OrientationChanged-Event。当它触发时,您可以修改网格并重新排列控件。

于 2012-06-11T11:58:07.650 回答