Вторая анимация WPF (StoryBoard) не работает - PullRequest
0 голосов
/ 06 августа 2020

Это сценарий: у меня есть Grid и Button. Сетка имеет логическое свойство Show. Когда пользователь нажимает кнопку, если Show=false, то сетка становится Visible. и когда Show=true Grid становится Collapse. при изменении видимости я делаю анимацию для сетки Height с помощью StoryBoard. ХОРОШО. все хорошо. когда пользователь нажимает кнопку, появляется Grid с анимацией. но при повторном щелчке анимация не отображается, а происходит просто Collapse. Это мой код:

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 здесь

1 Ответ

2 голосов
/ 06 августа 2020

Анимации являются асинхронными, что означает, что вы сворачиваете видимость одновременно с запуском анимации «growDownStory».

Добавьте некоторую задержку в зависимости от того, как долго вы ожидаете, что анимация «growDownStory» будет запустить.

Пример:

    growDownStory.Begin();
    await Task.Delay(1000); // allow time for the animation to perform its visual
    Container.Visibility = Visibility.Collapsed;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...