首页 > 解决方案 > WPF:动画后将网格可见性切换回第一个状态(折叠)

问题描述

所以我有这个Grid

<Grid x:Name="notificarionGrid" Visibility="Collapsed"/>

我想用动画改变它的可见性值,所以我有这个 2 Storyboard:

<Storyboard x:Key="fadeIn">
            <ObjectAnimationUsingKeyFrames BeginTime="0:0:0" Storyboard.TargetProperty="Visibility">
                <DiscreteObjectKeyFrame KeyTime="0">
                    <DiscreteObjectKeyFrame.Value>
                        <Visibility>Visible</Visibility>
                    </DiscreteObjectKeyFrame.Value>
                </DiscreteObjectKeyFrame>
            </ObjectAnimationUsingKeyFrames>
            <DoubleAnimation BeginTime="0:0:0.0" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:2.0"/>
        </Storyboard>

<Storyboard x:Key="fadeOut">
            <DoubleAnimation BeginTime="0:0:0:0" Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:2.0"/>
        </Storyboard>

现在这段代码工作正常,但这里唯一的问题是,在fadeOutmyGrid Visibility成为Hidden而不是Collapsed什么原因之后,某些元素在 this 下变得不负责任Grid

知道如何将我的Grid再次切换到Collapsed吗?

标签: wpfanimationgridstoryboard

解决方案


您可以处理以下Completed事件Storyboard

private void Storyboard_Completed(object sender, EventArgs e)
{
    notificarionGrid.Visibility = Visibility.Collapsed;
}

XAML:

<Storyboard x:Key="fadeOut" Completed="Storyboard_Completed">
    <DoubleAnimation BeginTime="0:0:0" Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:2.0"/>
</Storyboard>

或添加ObjectAnimationUsingKeyFrames到您的Storyboard

<Storyboard x:Key="fadeOut">
    <DoubleAnimation BeginTime="0:0:0" Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:2.0"/>
    <ObjectAnimationUsingKeyFrames BeginTime="0:0:2" Storyboard.TargetProperty="Visibility">
        <DiscreteObjectKeyFrame KeyTime="0">
            <DiscreteObjectKeyFrame.Value>
                <Visibility>Collapsed</Visibility>
            </DiscreteObjectKeyFrame.Value>
        </DiscreteObjectKeyFrame>
    </ObjectAnimationUsingKeyFrames>
</Storyboard>

推荐阅读