In my application, after entering an incorrect answer in the TextBox, an animation is played that changes the text in the Label (Score: {value}), after the correct answer, the score is incremented and the text in the Label is updated. If I enter the correct answer right away everything works as intended.
However if I enter the wrong answer first, and regardless of whether the animation has finished or not, the text will still turn green, but the score value in the label will not increase. Moreover, the variable itself is incremented.
If user submits incorrect answer once score will not increment
Meanwhile: {System.Windows.Controls.Label: Score: 0}
Here is the code:
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);
}
I tried to move line that updates score inside AnimateScore() method so it would update label after animation of correct answer. However debugger shows that score variable has update, but not label content.
lifeobd is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.