带延迟的 WPF 双动画
WPF double animation with delay
我正在尝试将矩形的不透明度从 0 更改为 1,然后再从 1 更改为 0,但每一步都要等待 2 秒。所以我希望 2 秒为 1,然后在 500 毫秒内将其更改为 0,然后再等待 2 秒,不透明度为 0,并在 500 毫秒后再次变为 1,依此类推。
我有这个代码:
Storyboard.SetTargetProperty(forwardDoubleAnimation,
new PropertyPath("(Path.Fill).(SolidColorBrush.Opacity)"));
Storyboard.SetTargetProperty(reverseDoubleAnimation,
new PropertyPath("(Path.Fill).(SolidColorBrush.Opacity)"));
forwardDoubleAnimation.Completed += (sender, args) =>
{
Thread.Sleep(2000);
reverseStoryboard.Begin();
};
reverseDoubleAnimation.Completed += (sender, args) =>
{
Thread.Sleep(2000);
forwardStoryboard.Begin();
};
但是我在 reverseStoryboard.Begin() 上有一个例外,说我没有为它设置目标 属性。
有没有办法使用单个动画并设置 属性 以便等待?
也许这可以帮助您(请根据您的问题更改持续时间)。
<Rectangle Grid.Row="0" x:Name="Rectangle" Fill="Red" Width="500" Height="400">
<Rectangle.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="Rectangle" Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:3" BeginTime="0:0:3" RepeatBehavior="Forever" AutoReverse="True"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Rectangle.Triggers>
</Rectangle>
尽管不透明度的值在 0 到 1 范围内,但您可以设置小于 0 或大于 1 的值。
如果您在 2.5 秒内设置不透明度从 -2 到 3 的动画,则在第一秒它从 -2 变为 0,实际上是 0,然后它在 0.5 秒内从 0 变为 1,然后从 1到 3,即在另一秒内有效地变为 1。
var animation = new DoubleAnimation
{
From = -2,
To = 3,
Duration = TimeSpan.FromSeconds(2.5),
AutoReverse = true,
RepeatBehavior = RepeatBehavior.Forever
};
rectangle.Fill.BeginAnimation(Brush.OpacityProperty, animation);
我正在尝试将矩形的不透明度从 0 更改为 1,然后再从 1 更改为 0,但每一步都要等待 2 秒。所以我希望 2 秒为 1,然后在 500 毫秒内将其更改为 0,然后再等待 2 秒,不透明度为 0,并在 500 毫秒后再次变为 1,依此类推。
我有这个代码:
Storyboard.SetTargetProperty(forwardDoubleAnimation,
new PropertyPath("(Path.Fill).(SolidColorBrush.Opacity)"));
Storyboard.SetTargetProperty(reverseDoubleAnimation,
new PropertyPath("(Path.Fill).(SolidColorBrush.Opacity)"));
forwardDoubleAnimation.Completed += (sender, args) =>
{
Thread.Sleep(2000);
reverseStoryboard.Begin();
};
reverseDoubleAnimation.Completed += (sender, args) =>
{
Thread.Sleep(2000);
forwardStoryboard.Begin();
};
但是我在 reverseStoryboard.Begin() 上有一个例外,说我没有为它设置目标 属性。
有没有办法使用单个动画并设置 属性 以便等待?
也许这可以帮助您(请根据您的问题更改持续时间)。
<Rectangle Grid.Row="0" x:Name="Rectangle" Fill="Red" Width="500" Height="400">
<Rectangle.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="Rectangle" Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:3" BeginTime="0:0:3" RepeatBehavior="Forever" AutoReverse="True"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Rectangle.Triggers>
</Rectangle>
尽管不透明度的值在 0 到 1 范围内,但您可以设置小于 0 或大于 1 的值。
如果您在 2.5 秒内设置不透明度从 -2 到 3 的动画,则在第一秒它从 -2 变为 0,实际上是 0,然后它在 0.5 秒内从 0 变为 1,然后从 1到 3,即在另一秒内有效地变为 1。
var animation = new DoubleAnimation
{
From = -2,
To = 3,
Duration = TimeSpan.FromSeconds(2.5),
AutoReverse = true,
RepeatBehavior = RepeatBehavior.Forever
};
rectangle.Fill.BeginAnimation(Brush.OpacityProperty, animation);