如何在代码后台实现Transform动画?按钮Transform动画不生效问题
WPF按钮Transform动画不生效的解决办法
你的动画失效核心原因是:Button默认没有TranslateTransform作为它的RenderTransform,直接对TranslateTransform.YProperty做动画时,找不到对应的目标属性,导致动画无法执行。
下面提供两种可行的修复方案:
方案1:在XAML中预先设置RenderTransform
修改Button的XAML代码,添加TranslateTransform作为它的RenderTransform:
<Grid x:Name="grid"> <Button Height="40" Width="120" Content="Button" x:Name="button" Click="button_Click"> <Button.RenderTransform> <TranslateTransform /> </Button.RenderTransform> </Button> </Grid>
此时你原来的后台代码可以直接正常运行,因为Button已经有了TranslateTransform实例,动画能找到对应的Y属性。
方案2:在后台代码中动态创建并绑定Transform
如果不想修改XAML,可以在点击事件里先给Button设置TranslateTransform,再绑定动画:
private void button_Click(object sender, RoutedEventArgs e) { // 检查并初始化TranslateTransform TranslateTransform translateTransform = button.RenderTransform as TranslateTransform; if (translateTransform == null) { translateTransform = new TranslateTransform(); button.RenderTransform = translateTransform; } var animation = new DoubleAnimation(0, 20, new Duration(TimeSpan.FromSeconds(1))); var story = new Storyboard(); story.Children.Add(animation); // 直接将动画目标设为TranslateTransform实例 Storyboard.SetTarget(animation, translateTransform); Storyboard.SetTargetProperty(animation, new PropertyPath(TranslateTransform.YProperty)); story.Begin(); }
这种方式更灵活,不需要提前在XAML中定义Transform,动画直接绑定到Transform实例,避免属性路径的匹配问题。
内容的提问来源于stack exchange,提问作者Mohammad Jafari
相关产品推荐
相关产品推荐

