后台代码中TranslateTransform动画无法生效问题求助
WPF后台代码实现TranslateTransform滑入动画无响应的解决思路
你的TranslateTransform动画没效果,核心原因是目标控件imageContainer的RenderTransform属性默认没有绑定TranslateTransform实例,动画找不到对应的属性载体,自然不会生效。下面是具体解决方法:
方法一:先为控件设置TranslateTransform,再通过Storyboard动画
先给控件的RenderTransform赋值TranslateTransform实例,再修正动画的目标属性路径:
// 先给控件绑定TranslateTransform实例 imageContainer.RenderTransform = new TranslateTransform(); DoubleAnimation animation = new DoubleAnimation(); animation.From = -100; animation.To = 0; animation.Duration = TimeSpan.FromSeconds(1); animation.EasingFunction = new ExponentialEase() { EasingMode = EasingMode.EaseOut }; Storyboard.SetTarget(animation, imageContainer); // 修正属性路径为RenderTransform的X属性 Storyboard.SetTargetProperty(animation, new PropertyPath("RenderTransform.X")); Storyboard sb = new Storyboard(); sb.Children.Add(animation); sb.Begin();
方法二:直接对TranslateTransform实例做动画(更简洁)
跳过Storyboard,直接给TranslateTransform的X属性启动动画,代码更精简:
TranslateTransform transform = new TranslateTransform(-100, 0); imageContainer.RenderTransform = transform; DoubleAnimation animation = new DoubleAnimation(0, TimeSpan.FromSeconds(1)); animation.EasingFunction = new ExponentialEase() { EasingMode = EasingMode.EaseOut }; // 直接在Transform实例上启动动画 transform.BeginAnimation(TranslateTransform.XProperty, animation);
特殊情况:控件已有其他RenderTransform
如果控件已经使用了其他变换(比如缩放、旋转),可以用TransformGroup组合多个变换,再指定动画路径:
TransformGroup transformGroup = new TransformGroup(); TranslateTransform translateTransform = new TranslateTransform(-100, 0); // 添加其他需要的变换 transformGroup.Children.Add(translateTransform); transformGroup.Children.Add(new ScaleTransform(1, 1)); imageContainer.RenderTransform = transformGroup; // 动画路径指向TransformGroup中对应索引的TranslateTransform的X属性 Storyboard.SetTargetProperty(animation, new PropertyPath("RenderTransform.Children[0].X"));
内容的提问来源于stack exchange,提问作者Jensolo
相关产品推荐
相关产品推荐

