2012-09-06 104 views
18

如何無限旋轉矩形 - 僅在xaml定義中。到目前爲止,我發現代碼中的解決方案,但沒有XAML: http://www.codeproject.com/Articles/23257/Beginner-s-WPF-Animation-Tutorial 我用這樣的:WPF在XAML中旋轉矩形動畫

private void Window_Loaded_1(object sender, RoutedEventArgs e) 
    { 
     var da = new DoubleAnimation(360, 0, new Duration(TimeSpan.FromSeconds(1))); 
     var rt = new RotateTransform(); 
     rect1.RenderTransform = rt; 
     rect1.RenderTransformOrigin = new Point(0.5, 0.5); 
     da.RepeatBehavior = RepeatBehavior.Forever; 
     rt.BeginAnimation(RotateTransform.AngleProperty, da); 
    } 

但我怎麼能只用XAML實現這一目標?

+2

http://www.galasoft.ch/mydotnet/articles/article-2006102701.aspx這解釋了代碼隱藏和XAML版本.. http://www.google.com! – KyorCode

+0

它看起來我在找什麼,我會檢查。謝謝。 –

+1

你的問題的代碼是我的問題的答案。謝謝! –

回答

43

像這樣的事情

<Rectangle x:Name="rect1" RenderTransformOrigin="0.5, 0.5"> 
    <Rectangle.RenderTransform> 
    <!-- giving the transform a name tells the framework not to freeze it --> 
    <RotateTransform x:Name="noFreeze" /> 
    </Rectangle.RenderTransform> 
    <Rectangle.Triggers> 
    <EventTrigger RoutedEvent="Loaded"> 
     <BeginStoryboard> 
     <Storyboard> 
      <DoubleAnimation 
      Storyboard.TargetProperty="(Rectangle.RenderTransform).(RotateTransform.Angle)" 
      To="-360" Duration="0:0:1" RepeatBehavior="Forever" /> 
     </Storyboard> 
     </BeginStoryboard> 
    </EventTrigger> 
    </Rectangle.Triggers> 
</Rectangle> 

當然,你可以刪除Loaded觸發和運行這個故事板,只要你想。

+0

謝謝,就是這樣。 –

+3

我需要將CenterX =「16」CenterY =「16」添加到RotateTransform中,以將原點居中在我的32x32矩形中。 – Dave

+7

僅供參考,如果你在這裏是因爲你已經嘗試了這個,並且你在動畫凍結屬性時遇到了錯誤,那是因爲WPF正在積極凍結你樹中的元素。爲了向框架提供一個不凍結轉換的提示,只需給你的轉換一個x:Name,框架就會看到它,並假定你將從代碼中引用它,所以不會凍結它。 – Will