Содержимое метки не обновляется после завершения анимации текстаC#

Место общения программистов C#
Anonymous
Содержимое метки не обновляется после завершения анимации текста

Сообщение Anonymous »

В моем приложении после ввода неправильного ответа в TextBox воспроизводится анимация, которая меняет текст в Label (Оценка: {value}), после правильного ответа оценка увеличивается и текст в Label обновляется. Если я сразу введу правильный ответ, все работает так, как задумано.
Однако, если я сначала введу неправильный ответ, независимо от того, завершилась анимация или нет, текст все равно станет зеленым. , но значение балла в метке не увеличится. Более того, сама переменная увеличивается.
Если пользователь отправит неверный ответ после того, как оценка не увеличится,

Изображение

Тем временем: {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);

}
Я попытался переместить строку, обновляющую оценку, внутри метода AnimateScore(), чтобы она обновляла метку после анимации правильного ответа. Однако отладчик показывает, что переменная оценки имеет обновление, но не содержимое метки.
Я предполагаю, что проблема кроется где-то в блоке текстовой анимации, но не могу ее понять. Разве анимация не должна завершиться через две секунды, позволяя следующему клику с правильным ответом обновить текст метки с помощью ScoreLabel.Content = $"Score: {score}"; ? Похоже, анимация каким-то образом препятствует обновлению ScoreLabel.Content.
UPD:

Код: Выделить всё

textAnimation.FillBehavior = FillBehavior.Stop;
решил проблему

Подробнее здесь: https://stackoverflow.com/questions/784 ... ion-ending

Вернуться в «C#»