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没有区别。我检查了它的值,它是正确的。主要问题是你提到的。异步行为和更改可见性同时发生。但拖延并不能解决我的问题。我只是删除了可见性命令。因为我不应该同时更改高度和可见性,在动画完成之前,网格已经折叠。你的回答是对的。谢谢。主要问题是你提到的。异步行为和更改可见性同时发生。但拖延并不能解决我的问题。我只是删除了可见性命令。因为我不应该同时更改高度和可见性,在动画完成之前,网格已经折叠。你的回答是对的。非常感谢。