C# VisualStateManager.GoToState未隐藏控件
我正在尝试使用VisualStateManager.GoToState方法隐藏网格的可见性。如果在应用程序正常启动时调用该方法,则控件将按预期隐藏。当我挂起并关闭Terminate然后恢复应用程序时,问题就会出现。在OnNavigationLoadState中,我调用VisualStateManager.goState,它应该隐藏网格的可见性,但是调用后控件仍然可见 这是我试图隐藏的网格:C# VisualStateManager.GoToState未隐藏控件,c#,xaml,winrt-xaml,C#,Xaml,Winrt Xaml,我正在尝试使用VisualStateManager.GoToState方法隐藏网格的可见性。如果在应用程序正常启动时调用该方法,则控件将按预期隐藏。当我挂起并关闭Terminate然后恢复应用程序时,问题就会出现。在OnNavigationLoadState中,我调用VisualStateManager.goState,它应该隐藏网格的可见性,但是调用后控件仍然可见 这是我试图隐藏的网格: <Grid x:Name="MyGrid" Grid.Column="0" Marg
<Grid x:Name="MyGrid" Grid.Column="0" Margin="0,0,0,0"
Width="350"
Visibility="{Binding Path = ShowGrid, Mode=TwoWay, Converter={StaticResource BooleanToVisibilityConverter}}" >
<customControls:MyCustomControl x:Name="EntityListViewControl" />
如果我在OnNavigationLoadState中将网格ShowGrid的dependency属性设置为false,那么网格将隐藏,但是我仍然想知道为什么VisualStateManager不工作。同样,VisualStateManager.GoToState的行为与预期的一样,如果我在应用程序运行后调用它,则它在恢复事件期间不工作。我还检查了OnNavigationLoadState中调用的布尔返回值,它返回true。我认为建议将所有GoToState调用放在一个方法中,如UpdateVisualStatesbool UseTransformations。我认为您可能有问题的一个原因是另一个对GoToState的调用可能正在切换状态以使控件可见。如果所有的GoToState调用都在一起,那么这种情况发生的可能性就比较小。当然,问题很可能出在其他地方,但可能需要一些调试才能看到,您需要共享更多代码,以便在应用程序挂起然后终止时启用repro.BTW,IIRC-它基本上会重新启动,因此,除非您对app.xaml.cs中的两个启动路径执行不同的操作,否则它的行为应该不会有所不同。在进一步调试之后,我发现对VisualStateManager.GoToState方法进行了两次调用。如果跳过第一个调用并执行第二个调用,则可视状态将正确更新。当两个调用都进入相同的视觉状态时,这是正常的行为吗?不,这似乎不正常。你确定他们会进入相同的视觉状态吗?也许其中一个没有在UI线程上运行?
<VisualState x:Name="HideControl">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="MyGrid" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame Value="Collapsed" KeyTime="0"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
protected override void OnNavigationLoadState(object sender, LoadStateEventArgs e)
{
VisualStateManager.GoToState(this, "HideControl", true);
}