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

