How to rotate continuously in Windows Phone 8?

I use this code to rotate

void rotate()
{
    Duration Time_duration = new Duration(TimeSpan.FromSeconds(20));
    Storyboard MyStory = new Storyboard();
    MyStory.Duration = Time_duration;
    DoubleAnimation My_Double = new DoubleAnimation();
    My_Double.Duration = Time_duration;
    MyStory.Chil*emphasized text*dren.Add(My_Double);
    RotateTransform MyTransform = new RotateTransform();
    Storyboard.SetTarget(My_Double, MyTransform);
    Storyboard.SetTargetProperty(My_Double, new PropertyPath("Angle"));
    My_Double.To = 270;
    this.maincan.RenderTransform = MyTransform;
    this.maincan.RenderTransformOrigin = new Point(0.5, 0.5);
    //stackPanel1.Children.Add(image1);
    MyStory.Begin();
}

It works, but I want to constantly rotate the image.

+5
source share
2 answers

This is just an idea, but if your only problem is to make the image rotate continuously, this is probably the easiest way to do this.

        void rotate()
        {
            DispatcherTimer dispatcherTimer = new DispatcherTimer();
            dispatcherTimer.Tick += dispatcherTimer_Tick;
            dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
            dispatcherTimer.Start();
        }

So, every second the event will be fired

 private void dispatcherTimer_Tick(object sender, EventArgs e)
    {
        Storyboard MyStory = new Storyboard();
        MyStory.Duration = new TimeSpan(0, 0, 1);
        DoubleAnimation My_Double = new DoubleAnimation();
        My_Double.Duration = new TimeSpan(0, 0, 1);
        MyStory.Children.Add(My_Double);
        RotateTransform MyTransform = new RotateTransform();
        Storyboard.SetTarget(My_Double, MyTransform);
        Storyboard.SetTargetProperty(My_Double, new PropertyPath("Angle"));
        My_Double.To = 360;
        YourImage.RenderTransform = MyTransform;
        YourImage.RenderTransformOrigin = new Point(0.5, 0.5);       
        MyStory.Begin();
    }

Let me know how this happens (:

EDIT

This is just an idea, I'm sure there are better ways.

 void rotate(int i)
       {            
        Storyboard MyStory = new Storyboard();
        MyStory.Duration = new TimeSpan(0,0,1);           
        DoubleAnimation My_Double = new DoubleAnimation();
        My_Double.Duration =  new TimeSpan(0,0,1);          
        MyStory.Children.Add(My_Double);
        RotateTransform MyTransform = new RotateTransform();
        Storyboard.SetTarget(My_Double, MyTransform);
        Storyboard.SetTargetProperty(My_Double, new PropertyPath("Angle"));
        My_Double.From = i;
        My_Double.To = i +90;
        m_Image.RenderTransform = MyTransform;
        m_Image.RenderTransformOrigin = new Point(0.5, 0.5);            
        MyStory.Begin();
        MyStory.Completed +=((arg,c) =>
        {
            if (i == 360)
            {
                rotate(0);
            }
            else 
            {
                rotate(i + 90);
            }        
        });                                
    }
+4
source

Storyboardhas a property RepeatBehaviorthat allows you to control the playback of the animation. In your code add the following line ...

MyStory.RepeatBehavior = RepeatBehavior.Forever;  // repeat forever 

or

MyStory.RepeatBehavior = new RepeatBehavior(TimeSpan.FromSeconds(20)); // repeat for 20 seconds

There are more examples in the official documentation:

http://msdn.microsoft.com/en-us/library/system.windows.media.animation.timeline.repeatbehavior(v=vs.95).aspx

+7

All Articles