Бесконечно вращать прямоугольник в 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
К вашему сведению, если вы здесь, потому что пробовали это, и вы получаете ошибку при анимации замороженного свойства, это потому, что 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