Однако, если я сначала введу неправильный ответ, независимо от того, завершилась анимация или нет, текст все равно станет зеленым. , но значение балла в метке не увеличится. Более того, сама переменная увеличивается.
Если пользователь отправит неверный ответ после того, как оценка не увеличится,

Тем временем: {System.Windows.Controls.Label: Оценка: 0}

Вот код:
Код: Выделить всё
private void Submit_Click(object sender, RoutedEventArgs e)
{
if (AnswerBox.Text == answer.ToString())
{
GenerateEquation();
resultTime[score] = milliseconds;
score++;
AnswerBox.Text = "";
milliseconds = 0;
AnimateScore(true);
ScoreLabel.Content = $"Score: {score}";
if (score == MAX_SCORE)
{
IsRunning = false;
SubmitButton.IsEnabled = false;
DisplayResults();
}
}
else
{
AnimateScore(false);
}
}
private void AnimateScore(bool IsCorrect)
{
Label label = ScoreLabel;
if(!IsCorrect)
{
Storyboard storyboard = new Storyboard();
StringAnimationUsingKeyFrames textAnimation = new StringAnimationUsingKeyFrames();
textAnimation.Duration = TimeSpan.FromSeconds(2);
textAnimation.KeyFrames.Add(new DiscreteStringKeyFrame("Incorrect answer!", TimeSpan.Zero));
textAnimation.KeyFrames.Add(new DiscreteStringKeyFrame($"Score: {score}", TimeSpan.FromSeconds(2)));
Storyboard.SetTarget(textAnimation, label);
Storyboard.SetTargetProperty(textAnimation, new PropertyPath(ContentControl.ContentProperty));
storyboard.Children.Add(textAnimation);
storyboard.Begin();
}
SolidColorBrush animatedBrush = new SolidColorBrush(Colors.Black);
label.Foreground = animatedBrush;
ColorAnimationUsingKeyFrames colorAnimation = new ColorAnimationUsingKeyFrames();
colorAnimation.Duration= TimeSpan.FromSeconds(2);
colorAnimation.KeyFrames.Add(new DiscreteColorKeyFrame(IsCorrect ? Colors.Green:Colors.Red, TimeSpan.Zero));
colorAnimation.KeyFrames.Add(new DiscreteColorKeyFrame(Colors.Black, TimeSpan.FromSeconds(2)));
label.Foreground.BeginAnimation(SolidColorBrush.ColorProperty, colorAnimation);
}
Я предполагаю, что проблема кроется где-то в блоке текстовой анимации, но не могу ее понять. Разве анимация не должна завершиться через две секунды, позволяя следующему клику с правильным ответом обновить текст метки с помощью ScoreLabel.Content = $"Score: {score}"; ? Похоже, анимация каким-то образом препятствует обновлению ScoreLabel.Content.
UPD:
Код: Выделить всё
textAnimation.FillBehavior = FillBehavior.Stop;Подробнее здесь: https://stackoverflow.com/questions/784 ... ion-ending