2

我为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>

4

2 回答 2

1

VisualStateManager.GoToState您是否在代码隐藏中调用该方法?您需要检测应用程序何时从 Full/Fill 转换为 Snap 模式,然后调用此方法。

您可以在此处找到此功能的 MSDN 文档。

Page当您的父控件或应用程序的大小发生变化时,您通常会认识到这种转换Window这个 SO question(查看 Jowen 的答案)为您提供了一个代码片段,说明如何通过侦听 Window 的 size changed 事件来做到这一点。

于 2012-12-05T07:33:25.587 回答
1

我有一个类似的问题,我找到了一个对我有帮助的解决方案,如果用户控件托管在 layoutawarepage 中,可能有人会觉得它很有用

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

否则您将不得不遵循(示例可以在布局感知页面中找到) •在 sizechanged 上制作事件处理程序

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

• 使用 VisualStateManager.GoToState 移至该状态

于 2013-06-25T22:33:01.980 回答