我为 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>
答案 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
移动到该状态