Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# VisualStateManager.GoToState未隐藏控件_C#_Xaml_Winrt Xaml - Fatal编程技术网

C# VisualStateManager.GoToState未隐藏控件

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

我正在尝试使用VisualStateManager.GoToState方法隐藏网格的可见性。如果在应用程序正常启动时调用该方法,则控件将按预期隐藏。当我挂起并关闭Terminate然后恢复应用程序时,问题就会出现。在OnNavigationLoadState中,我调用VisualStateManager.goState,它应该隐藏网格的可见性,但是调用后控件仍然可见

这是我试图隐藏的网格:

        <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);
}