9

Basically I am currently doing final year project in my college whereby i am touching on surface 2.0 WPF.

My project is a game whereby if a user answer a question wrongly,the next question will be rotated to make it more difficult. But I am unsure how to do it. I saw an example in msdn microsoft but it only shows XAML codes. I need the C# codes.

Here's the XAML example.

http://msdn.microsoft.com/en-us/library/ms754028.aspx

The last example

Here's part of my validation codes. I need to activate the animation if user answer wrongly.

 if (surfaceRadioButton1.IsChecked == true)

{

user_answer = (string)surfaceRadioButton1.Content;

            textBlock2.Text = validateAnswer(user_answer, answer);
            retreiveYellowQns();
            if (textBlock2.Text.Equals("Correct"))
            {
                yellow_coord = yellow_coord + 50;
                Canvas.SetLeft(car, yellow_coord);
                Canvas.SetTop(car, 289);
            }
            else
            {
                if (yellow_coord <= 330)
                {
                    yellow_coord = 330;
                    Canvas.SetLeft(car, yellow_coord);
                    Canvas.SetTop(car, 289);
                }
                else
                {
                    yellow_coord = yellow_coord - 50;
                    Canvas.SetLeft(car, yellow_coord);
                    Canvas.SetTop(car, 289);
                }
            }
        }

Any Help will be glad,thanks in advance.

JasonMArcher
  • 14,195
  • 22
  • 56
  • 52
Joon Kiat
  • 93
  • 1
  • 1
  • 3

3 Answers3

11

Try this one. You can use an animation on the RenderTransform:

var rotateAnimation = new DoubleAnimation(0, 180, TimeSpan.FromSeconds(5));
var rt = (RotateTransform) textblock2.RenderTransform;
rt.BeginAnimation(RotateTransform.AngleProperty, rotateAnimation);

In your Xaml, you can add the RotateTransform:

<TextBlock>
  <TextBlock.RenderTransform>
    <RotateTransform Angle="0"/>
  </TextBlock.RenderTransform>
</TextBlock>
ElGaucho
  • 408
  • 2
  • 14
  • So should i put that code inside the else { yellow_coord = yellow_coord - 50; Canvas.SetLeft(car, yellow_coord); Canvas.SetTop(car, 289); – Joon Kiat Jan 30 '12 at 09:40
  • Yes, put this code to the lines where your text should be rotated (Error validation -> error case) .This will animate your text to be rotated with 180 degrees within 5 Seconds. This will give the user a better visual feedback that it is rotated. – ElGaucho Jan 30 '12 at 10:16
  • Thanks,it works. Just one last question. How do i forcefully terminate the animation once the user answer the next question correctly? – Joon Kiat Feb 01 '12 at 04:13
  • You'll have to wrap your Animations within a BeginStoryboard. Once you've given this Storyboard a name, you can call StopStoryboard with the given name in your "CorrectAnswer" - Handler. Check out this one: http://stackoverflow.com/questions/5863722/combining-wpf-datatriggers-and-storyboard-in-code – ElGaucho Feb 01 '12 at 09:11
7

You will have to use Transformation for this. Try this answer https://stackoverflow.com/a/8815374/293712

Or You can also try, (I have not tried this) Look at this article for more details

textBlock2.RenderTransform = new RotateTransform(IntegerAngleValue); 
Community
  • 1
  • 1
Maheep
  • 5,539
  • 3
  • 28
  • 47
2
            var rotateAnimation = new DoubleAnimation(180, 0, TimeSpan.FromMilliseconds(200));
            UiImage.RenderTransformOrigin = new Point(0.5,0.5);
            UiImage.RenderTransform = new RotateTransform();
            var rt = (RotateTransform)UiImage.RenderTransform;
            rt.BeginAnimation(RotateTransform.AngleProperty, rotateAnimation);
Andreas
  • 3,843
  • 3
  • 40
  • 53