如何在Windows Phone 8中连续旋转?

sel*_*vam 5 c# rotation windows-phone-7 rotateanimation

我用这个代码进行轮换

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();
}
Run Code Online (Sandbox Code Playgroud)

它工作,但我想连续旋转图像.

Nei*_*ner 7

Storyboard有一个名为属性RepeatBehavior,它允许您控制动画的重复.在您的代码中,添加以下行...

MyStory.RepeatBehavior = RepeatBehavior.Forever;  // repeat forever 
Run Code Online (Sandbox Code Playgroud)

要么

MyStory.RepeatBehavior = new RepeatBehavior(TimeSpan.FromSeconds(20)); // repeat for 20 seconds
Run Code Online (Sandbox Code Playgroud)

官方文档中有更多示例:

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


Swi*_*arp 4

这只是一个想法,但如果您唯一关心的是使图像连续旋转,这可能是最简单的方法。

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

所以每秒都会触发该事件

 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();
    }
Run Code Online (Sandbox Code Playgroud)

让我知道事情的后续 (:

编辑

这只是一个想法我相信有更好的方法

 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);
            }        
        });                                
    }
Run Code Online (Sandbox Code Playgroud)