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

WPF中C#实现按钮点击旋转动画无效问题求助

WPF按钮旋转动画不生效的解决方法

你的动画代码逻辑本身没问题,但核心问题是按钮未关联RotateTransform——动画要修改的RotateTransform.AngleProperty没有对应的实例绑定到按钮上,导致动画无目标可作用。

以下是两种可行的修复方案:

方案1:XAML中预先绑定RotateTransform

先在按钮的XAML定义里添加RenderTransform:

<Button x:Name="OpenMenuButton" Content="打开菜单" Click="OpenMenu_Click">
    <Button.RenderTransform>
        <RotateTransform x:Name="BtnRotateTransform" Angle="0"/>
    </Button.RenderTransform>
</Button>

然后修改动画代码的目标设置,直接绑定到这个RotateTransform实例:

// 替换原有的Storyboard.SetTargetName和SetTargetProperty代码
Storyboard.SetTarget(openMenuRotate, BtnRotateTransform);
Storyboard.SetTargetProperty(openMenuRotate, new PropertyPath(RotateTransform.AngleProperty));

方案2:纯代码方式添加RotateTransform

在初始化动画前,先给按钮动态添加RotateTransform:

// 初始化按钮的RotateTransform
RotateTransform btnRotate = new RotateTransform();
OpenMenuButton.RenderTransform = btnRotate;

// 后续动画设置不变,仅修改目标绑定
DoubleAnimation openMenuRotate = new DoubleAnimation();
openMenuRotate.From = 0;
openMenuRotate.To = 90;
openMenuRotate.Duration = new Duration(TimeSpan.FromMilliseconds(1000));
openMenuRotate.FillBehavior = FillBehavior.Stop;
openMenuRotate.AutoReverse = true;

openmenurotateSB = new Storyboard();
openmenurotateSB.Children.Add(openMenuRotate);
// 绑定到刚创建的RotateTransform实例
Storyboard.SetTarget(openMenuRotate, btnRotate);
Storyboard.SetTargetProperty(openMenuRotate, new PropertyPath(RotateTransform.AngleProperty));

额外说明

  • 如果你坚持使用SetTargetName,需要确保RotateTransform在当前NameScope中注册(XAML中定义的元素默认已注册,代码创建的需要手动调用RegisterName),但直接使用SetTarget绑定实例更简单可靠。
  • 你的FillBehavior.Stop和AutoReverse设置会让动画从0→90→0后恢复初始状态,若需要保持旋转后的状态,可将FillBehavior改为FillBehavior.HoldEnd并去掉AutoReverse。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:36:42