WPF двойная анимация с задержкой - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь изменить непрозрачность прямоугольника с 0 на 1 и обратно с 1 на 0, но также ждать 2 секунды на каждом шаге. поэтому я хочу, чтобы 2 секунды были равны 1, после этого измените его на 0 за 500 миллисекунд, а затем подождите еще 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 (), которое говорит, что я не установил для него целевое свойство.

Есть ли способ сделать это с помощью одной анимации и установить свойство для ожидания?

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Вы можете воспользоваться тем фактом, что, хотя непрозрачность имеет значения в диапазоне от 0 до 1, вы можете установить значения ниже 0 или больше 1.

Если вы анимируете непрозрачность от -2 до 3 за 2,5 секунды, в первую секунду она изменяется от -2 до 0, что фактически равно 0, а затем от 0 до 1 за 0,5 секунды, а затем от 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 голосов
/ 10 сентября 2018

Может быть, это может помочь вам (пожалуйста, измените продолжительность в зависимости от вашей проблемы).

<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>
...