C# WPF第二部动画(故事板)不';行不通

C# WPF第二部动画(故事板)不';行不通,c#,wpf,C#,Wpf,这是一个场景: 我有一个网格和一个按钮。网格具有Show布尔属性。当用户单击按钮时,如果Show=false,则网格将变得可见。当Show=true网格变为Collapse时。 当它的可见性发生变化时,我用故事板为网格的高度制作动画 好啊一切都很好。当用户单击按钮时,Grid将显示动画。但当再次单击时,动画不会显示,只是发生了折叠。 这是我的代码: Storyboard growUpStory = new Storyboard(); Storyboard growDownStory =

这是一个场景: 我有一个
网格
和一个
按钮
。网格具有
Show
布尔属性。当用户单击按钮时,如果
Show=false
,则网格将变得
可见
。当
Show=true
网格变为
Collapse
时。 当它的可见性发生变化时,我用故事板为网格的
高度制作动画

好啊一切都很好。当用户单击按钮时,
Grid
将显示动画。但当再次单击时,动画不会显示,只是发生了折叠。
这是我的代码:

Storyboard growUpStory = new Storyboard();
    Storyboard growDownStory = new Storyboard();

    DoubleAnimation growUp, growDown;
以任何方式:

    height = Container.DesiredSize.Height;
    growUp = new DoubleAnimation
                {
                    From = 0,
                    To = height > MaxHeight ? MaxHeight : height,
                    Duration = new Duration(TimeSpan.FromSeconds(1)),
                    AutoReverse = false
                };
               
                Container.Visibility = Visibility.Collapsed;

                growDown = new DoubleAnimation
                {
                    From = height > MaxHeight ? MaxHeight : height,
                    To = 0,
                    Duration = new Duration(TimeSpan.FromSeconds(1)),
                    AutoReverse = false
                };

                growUpStory.Children.Add(growUp);
                growDownStory.Children.Add(growDown);
当我调用事件时:

if (Show)
            {
                Storyboard.SetTarget(growUpStory, Container);
                Storyboard.SetTargetProperty(growUpStory, new PropertyPath(Grid.HeightProperty));
                growUpStory.Begin();

                Container.Visibility = Visibility.Visible;
            }
            else
            {
                Storyboard.SetTarget(growDownStory, Container);
                Storyboard.SetTargetProperty(growDownStory, new PropertyPath(Grid.HeightProperty));
                growDownStory.Begin();
                Container.Visibility = Visibility.Collapsed;
            }
我尝试了很多方法,但都无法解决。我的问题在哪里?你知道吗?谢谢

  • 我不能在这里使用
    XAML

动画是异步的,这意味着您在开始“成长故事”动画的同时正在折叠可见性

根据“成长故事”动画预计运行的时间,添加一些延迟

例如:

    growDownStory.Begin();
    await Task.Delay(1000); // allow time for the animation to perform its visual
    Container.Visibility = Visibility.Collapsed;

动画是异步的,这意味着您在开始“成长故事”动画的同时折叠可见性

根据“成长故事”动画预计运行的时间,添加一些延迟

例如:

    growDownStory.Begin();
    await Task.Delay(1000); // allow time for the animation to perform its visual
    Container.Visibility = Visibility.Collapsed;

我认为问题就在这里:
From=height>MaxHeight?MaxHeight:height
尝试将其设置为:
From=MaxHeight
From=height
@Tofik没有区别。我检查它的值是否正确。我认为问题在于:
From=height>MaxHeight?MaxHeight:height
尝试将其设置为:
From=MaxHeight
From=height
@Tofik没有区别。我检查了它的值,它是正确的。主要问题是你提到的。异步行为和更改可见性同时发生。但拖延并不能解决我的问题。我只是删除了可见性命令。因为我不应该同时更改高度和可见性,在动画完成之前,网格已经折叠。你的回答是对的。谢谢。主要问题是你提到的。异步行为和更改可见性同时发生。但拖延并不能解决我的问题。我只是删除了可见性命令。因为我不应该同时更改高度和可见性,在动画完成之前,网格已经折叠。你的回答是对的。非常感谢。