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
相关产品推荐
相关产品推荐

