VisualStateManager:页面如何识别初始VisualState

时间:2013-09-30 09:11:17

标签: windows-store-apps winrt-xaml visualstatemanager visualstates

我对 Windows应用商店应用VisualStateManager的工作存有疑问......

假设此示例页面:

<common:LayoutAwarePage x:Name="pageRoot">
    <Grid Style="{StaticResource LayoutRootStyle}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="400" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <ListView Grid.Column="0"
                  x:Name="testElement" />
        <Grid Grid.Column="1" />
    </Grid>
<common:LayoutAwarePage/>

我使用示例VisualStateManager声明了下一个VisualState行为:

<VisualStateManager.VisualStateGroups>
    <VisualStateGroup x:Name="ApplicationViewStates">
        <VisualState x:Name="Snapped">
            <Storyboard>
                <ObjectAnimationUsingKeyFrames Storyboard.TargetName="testElement"
                                               Storyboard.TargetProperty="Visibility">
                    <DiscreteObjectKeyFrame KeyTime="0"
                                            Value="Collapsed" />
                </ObjectAnimationUsingKeyFrames>
            </Storyboard>
        </VisualState>
    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>

现在我的问题是:

  1. 应用程序如何确定“状态”(我的意思是,属性的​​值)是我在页面的XAML声明中使用的那个?
  2. 我是否需要明确设置页面的“初始”值 - 例如 - FullScreenLandscapeOrWide VisualState
  3. 页面是否可能以不同的VisualState“状态”(不是FullScreenLandscapeOrWide)启动(可能与其他屏幕分辨率或特定设备一起),如果我没有声明FullScreenLandscapeOrWide VisualState(初始版本),则会给我带来问题状态)?
  4. 提前感谢您的澄清......

1 个答案:

答案 0 :(得分:0)

所有事情都发生在LayoutAwarePage。查看Visual state switching区域,在加载页面时调用StartLayoutUpdates事件。它确定了应用的当前视觉状态,您不需要在每个页面中明确添加。当应用程序在该特定状态下打开时,它可以将控件切换为特定的可视状态。