带延迟的 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);