Безкрайно завъртане на правоъгълник в XAML

Как да дефинирам XAML за безкрайно завъртане на правоъгълник?

Досега намерих решение с код, но без xaml: http://www.codeproject.com/Articles/23257/Beginner-s-WPF-Animation-Tutorial, който използвам така:

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

Но как мога да постигна това само с XAML?


person Bruno Bieri    schedule 06.09.2012    source източник
comment
galasoft.ch/mydotnet/articles/article-2006102701.aspx това обяснява както задния код, така и XAML версията.. google.com!   -  person KyorCode    schedule 06.09.2012
comment
Изглежда това, което търся, ще го проверя. Благодаря.   -  person Bruno Bieri    schedule 06.09.2012
comment
Кодът на вашия въпрос беше отговор на моя въпрос. Благодаря!   -  person Ziad Akiki    schedule 02.07.2015
comment
Добре дошли :-D   -  person Bruno Bieri    schedule 02.07.2015
comment
Хех, имах нужда от кода, така че благодаря. Защо изобщо използваме XAML, като се има предвид, че е два пъти по-дълъг и донякъде тъп, оставям на философите.   -  person Tuntable    schedule 14.05.2020


Отговори (1)


Нещо като това

<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 и да стартирате този сценарий, когато пожелаете.

person Zabavsky    schedule 06.09.2012
comment
Трябваше да добавя CenterX=16 CenterY=16 към RotateTransform, за да центрирам началото в моя правоъгълник 32x32. - person Dave; 14.01.2014
comment
FYI, ако сте тук, защото сте опитали това и получавате грешка за анимиране на замразено свойство, това е, защото WPF агресивно замразява елементи във вашето дърво сега. За да предоставите намек на рамката да не замразява трансформацията, просто дайте на вашата трансформация x:Name, което рамката вижда и приема, че ще го препращате от код и така няма да го замрази. - person ; 03.03.2015
comment
За нубове като мен това също се нуждае от черта, дебелина на линията, цвят на фона, размер и т.н. <Rectangle x:Name="rect1" RenderTransformOrigin="0.5, 0.5" Width="50" Height="50" Stroke="Black" StrokeThickness="10"> - person The One; 30.03.2017
comment
@Dave По-практично е да използвате RenderTransformOrigin=".5, .5" и да предотвратите ръчното позициониране, доколкото можете. - person Star Helvanithri; 22.06.2019