Исчезновение с помощью DispatcherTimer

В моем проекте uwp у меня есть 3 разных цветовых наложения на изображения (зеленый, желтый и красный). Эти цвета должны указывать, забронирован ли номер (в данном случае номер представляет собой изображение) или нет.

Если номер забронирован, он должен исчезнуть с green color и исчезнуть с red color, а затем через 7 секунд red color должен смениться на yellow color, а затем, наконец, yellow color снова должен смениться на green color.

  1. Для затухания я использую Windows Animation extension for UWP.
  2. Green Color устанавливается по умолчанию.

Прямо сейчас, когда номер забронирован, работает первый переход (от красного к желтому), но нет перехода от Yellow до Green.

    public void RedIndicatorColorToYellowIndicatorColor()
    {
        StatusColor.Fade(duration: 1000, delay: 2000, value: 0).Start();
        StatusColor.Fill = RedBrush;
        DispatcherTimer ColorTimer = new DispatcherTimer();
        ColorTimer.Interval = TimeSpan.FromSeconds(7);
        ColorTimer.Tick += (Sender, args) =>
        {
            YellowindIcatorColorToGreenIndicatorColor();
            ColorTimer.Stop();
        };
        ColorTimer.Start();
    }

    public void YellowindIcatorColorToGreenIndicatorColor()
    {
        StatusColor.Fade(duration: 1000, delay: 0, value: 1).Start();
        StatusColor.Fill = YellowBrush;
        DispatcherTimer ColorTimer2 = new DispatcherTimer();
        ColorTimer2.Interval = TimeSpan.FromSeconds(7);
        ColorTimer2.Tick += (Zender, Args) =>
        {
            StatusColor.Fill = GreenBrush;
            ColorTimer2.Stop();
        };
        ColorTimer2.Start();
    }

StatusColor — это прямоугольник, который содержит цветовые наложения.


person luddep    schedule 24.05.2018    source источник
comment
Приведенный выше код хорошо работает на моей стороне с использованием Fade. Цвет меняется от красного к желтому, затем от желтого к зеленому. Какой у вас xaml-код? Я не могу воспроизвести вашу проблему, не могли бы вы предоставить минимальный образец, чтобы помочь мне увидеть ее?   -  person Breeze Liu - MSFT    schedule 25.05.2018
comment
@BreezeLiu-MSFT Спасибо за ответ! Я уже решил проблему, но забыл убрать вопрос... Но спасибо за попытку помочь :)   -  person luddep    schedule 25.05.2018
comment
Ладно, рад вот этому :).   -  person Breeze Liu - MSFT    schedule 25.05.2018
comment
@BreezeLiu-MSFT Спасибо! Я должен удалить вопрос, верно? :)   -  person luddep    schedule 25.05.2018
comment
Вместо этого вы можете переключиться на использование цветной анимации/раскадровки. Это убирает код таймера.   -  person Emond Erno    schedule 25.05.2018


Ответы (1)


Проблема решена!

public void RedIndicatorColorToYellowIndicatorColor()
            {
                StatusColor.Fill = GreenBrush;
                DispatcherTimer ColorTimer = new DispatcherTimer();
                ColorTimer.Interval = TimeSpan.FromSeconds(7);
                ColorTimer.Tick += async (Sender, args) =>
                {
                    await StatusColor.Fade(duration: 1000, delay: 0, value: 0).StartAsync();
                    StatusColor.Fill = RedBrush;
                    await StatusColor.Fade(duration: 1200, delay: 0, value: 1).StartAsync();

                    YellowindIcatorColorToGreenIndicatorColor();
                    ColorTimer.Stop();
                };
                ColorTimer.Start();
            }

            public void YellowindIcatorColorToGreenIndicatorColor()
            {
                DispatcherTimer ColorTimer2 = new DispatcherTimer();
                ColorTimer2.Interval = TimeSpan.FromSeconds(7);
                ColorTimer2.Tick += async (Zender, Args) =>
                {
                    await StatusColor.Fade(duration: 1000, delay: 0, value: 0).StartAsync();
                    StatusColor.Fill = YellowBrush;
                    await StatusColor.Fade(duration: 1200, delay: 0, value: 1).StartAsync();

                    red2green();
                    ColorTimer2.Stop();
                };
                ColorTimer2.Start();
            }
person luddep    schedule 25.05.2018