2012-09-06 14 views
18

Come posso ruotare un rettangolo infinitamente - SOLO all'interno della definizione xaml. Finora ho trovato una soluzione con codice, ma senza XAML: http://www.codeproject.com/Articles/23257/Beginner-s-WPF-Animation-Tutorial che uso in questo modo:WPF Ruota animazione rettangolo in 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); 
    } 

Ma come posso raggiungere questo obiettivo solo con XAML?

+2

http://www.galasoft.ch/mydotnet/articles/article-2006102701.aspx questo spiega sia code-behind sia la versione XAML .. http://www.google.com! – KyorCode

+0

Sembra quello che sto cercando, lo controllerò. Grazie. –

+1

Il codice della tua domanda era una risposta alla mia domanda. Grazie! –

risposta

43

Qualcosa di simile

<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> 

Naturalmente è possibile rimuovere Loaded grilletto ed eseguire questo storyboard ogni volta che vuoi.

+0

Grazie, è tutto. –

+3

Avevo bisogno di aggiungere CenterX = "16" CenterY = "16" a RotateTransform per centrare l'origine nel mio rettangolo 32x32. – Dave

+7

FYI, se sei qui perché hai provato questo e hai un errore nell'animazione di una proprietà congelata, è perché WPF sta congelando in modo aggressivo gli elementi nella tua struttura ora. Per fornire un suggerimento al framework di non congelare la trasformazione, è sufficiente dare alla trasformazione un x: Name, che il framework vede e presuppone che lo si farà riferimento dal codice e quindi non lo bloccherà. – Will