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

WPF动画异常:为Canvas中矩形的Canvas.Top属性加动画时遇报错

解决WPF Storyboard动画中TargetProperty未指定的异常

你的问题出在Storyboard.SetTargetProperty方法的参数传递错误,正确的写法应该是将动画对象(doubleAnim)作为第一个参数,而不是目标元素(rect)。

修正后的代码

// Create rectangle on canvas.
var rect = new Rectangle
{
    Name = "Rect",
    Width = 200,
    Height = 80,
    Fill = Brushes.Brown
};
RegisterName(rect.Name, rect);
MainCanvas.Children.Add(rect);
Canvas.SetLeft(rect, 110); Canvas.SetTop(rect, 43);

// Add animation to the storyboard
var doubleAnim = new DoubleAnimation(87, 166d, new Duration(TimeSpan.FromSeconds(10)));
_storyboard.Children.Add(doubleAnim);
Storyboard.SetTarget(doubleAnim, rect);
// 修正此处:第一个参数改为动画对象doubleAnim
Storyboard.SetTargetProperty(doubleAnim, new PropertyPath(Canvas.TopProperty));
rect.Loaded += (_, _) => _storyboard.Begin(this);

原因解释

Storyboard.SetTargetProperty方法的作用是为动画实例指定要修改的目标属性,因此第一个参数必须是你要配置的动画对象(这里是doubleAnim),而不是被动画的UI元素。你之前错误地把rect传进去,导致动画本身没有被设置TargetProperty,触发了InvalidOperationException异常。

你也可以用字符串形式的属性路径替代依赖属性写法,效果完全一致:

Storyboard.SetTargetProperty(doubleAnim, new PropertyPath("(Canvas.Top)"));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:15:51