用户控件中的VisualStateManager

时间:2012-12-05 07:03:36

标签: c# wpf silverlight windows-store-apps

我为 Windows RT 设计了一个应用程序。我使用了VisualStateManager来抢占用户控件。但是当我的应用程序快照时,用户控件没有更改。问题出在哪里?

<Grid  Width="500" Height="40" Margin="15" x:Name="questionRoot" Background="DarkSeaGreen">

    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" >

        <TextBlock x:Name="OrginalWord" FontSize="32" Text="{Binding Question.OrginalWord}"></TextBlock>

    </StackPanel>
    <VisualStateManager.VisualStateGroups>

        <!-- Visual states reflect the application's view state -->
        <VisualStateGroup x:Name="ApplicationViewStates">
            <VisualState x:Name="FullScreenLandscape"/>
            <VisualState x:Name="Filled"/>

            <!-- The entire page respects the narrower 100-pixel margin convention for portrait -->
            <VisualState x:Name="FullScreenPortrait"/>
            <!--
                The back button and title have different styles when snapped, and the list representation is substituted
                for the grid displayed in all other view states
            -->
            <VisualState x:Name="Snapped">
                <Storyboard>

                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OrginalWord" Storyboard.TargetProperty="FontSize">
                        <DiscreteObjectKeyFrame KeyTime="0" Value="88"/>
                    </ObjectAnimationUsingKeyFrames>



                </Storyboard>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
</Grid>

2 个答案:

答案 0 :(得分:1)

您是否在代码隐藏中调用VisualStateManager.GoToState方法?您需要检测应用程序何时从完全/填充模式转换为快照模式,然后调用此方法。

您将找到此功能here的MSDN文档。

Page父控件或应用Window的大小发生变化时,您通常会认识到此转换。 This SO question(请查看Jowen的答案)通过收听Window的大小更改事件,为您提供有关如何执行此操作的代码段。

答案 1 :(得分:1)

我遇到了类似的问题,我找到了一个帮助我的解决方案,如果usercontrol托管在layoutawarepage中,可能会有人发现它很有用

<my:usercontrole Loaded="StartLayoutUpdates" Unloaded="StopLayoutUpdates" />

否则你将不得不遵循(例子可以在布局识别页面中找到) •使用sizechanged创建事件处理程序

•在事件处理程序中使用ApplicationView.Value检查视图状态

•使用VisualStateManager.GoToState

移动到该状态