WPF在XAML中旋转矩形动画

Bru*_*eri 24 wpf animation xaml autorotate

如何无限旋转矩形 - 仅在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);
    }
Run Code Online (Sandbox Code Playgroud)

但是我怎样才能通过XAML实现这一目标?

Zab*_*sky 57

像这样的东西

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

当然,您可以随时删除Loaded触发器并运行此故事板.

  • 仅供参考,如果你在这里是因为你已经尝试了这个并且你得到一个关于动画冻结属性的错误,那是因为WPF正在积极地冻结树中的元素.要为框架提供不冻结转换的提示,只需将转换赋予x:Name,框架可以看到并假设您将从代码中引用它,因此不会冻结它. (9认同)
  • 我需要将CenterX ="16"CenterY ="16"添加到RotateTransform以将原点居中放在我的32x32矩形中. (3认同)
  • @Dave 使用 `RenderTransformOrigin=".5, .5"` 并尽可能防止手动定位更实用。 (2认同)