You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF通过C#代码(非XAML)实现按钮点击图片旋转动画及问题排查

问题根因

动画无效果是两个代码疏漏导致的:

  • 未给目标Image控件初始化RotateTransform实例:WPF中UIElement.RenderTransform默认是恒等变换,不存在旋转变换对象,动画目标属性RotateTransform.AngleProperty没有对应的宿主对象,自然不会执行。
  • 事件绑定顺序错误:先调用Begin()启动动画再绑定Completed事件,存在动画结束时事件还未注册的概率问题。
修正代码

你要求纯C#实现逻辑,不需要改动现有XAML结构,直接替换按钮点击事件的代码即可:

private void Button_Click(object sender, RoutedEventArgs e)
{
    // 初始化旋转变换实例赋值给图片
    Brett.RenderTransform = new RotateTransform();

    DoubleAnimation doubleAnimation = new DoubleAnimation
    {
        Duration = new Duration(TimeSpan.FromSeconds(3)),
        From = 0,
        To = -90
    };

    Storyboard storyBoard = new Storyboard();
    storyBoard.Children.Add(doubleAnimation);
    Storyboard.SetTarget(doubleAnimation, Brett);
    // 指向正确的嵌套属性路径
    Storyboard.SetTargetProperty(doubleAnimation, 
        new PropertyPath("(UIElement.RenderTransform).(RotateTransform.Angle)"));

    // 先注册完成事件再启动动画
    storyBoard.Completed += StoryBoard_Completed;
    storyBoard.Begin();
}
补充说明

你在XAML中预先配置的RenderTransformOrigin="0.5, 0.5"会正常生效,旋转原点默认在图片中心,不需要额外调整。如果后续需要触发多次旋转,不需要每次都新建RotateTransform,判断下Brett.RenderTransform是否为RotateTransform类型即可,避免重置当前旋转角度。


内容的提问来源于stack exchange,提问作者Liane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 22:01:26