如何获取动态创建的故事板的目标属性?我的代码只是返回null

本文关键字:我的 属性 目标 代码 null 返回 何获取 获取 的故事 创建 动态 | 更新日期: 2023-09-27 17:58:20

Storyboard.SetTargetProperty设置动画目标属性,但下面一行的Storyboard.GetTargetProperty将返回null。

以下代码在倒数第二行崩溃,Storybard.SetTargetProperty(a,Storyboard.GetTargetProperty);在DoubleAnimation a被指定了目标特性之后。如有任何帮助,我们将不胜感激!

删除该行将生成一个情节提要,该情节提要可以正确地为矩形设置动画。

完整的代码在这里:

例如,

public Storyboard moveDown(Rectangle rect){
//Set up the animation
DoubleAnimation a=new DoubleAnimation();
a.RepeatBehavior=new RepeatBehavior(1);
a.FillBehavior=FillBehavior.HoldEnd;
a.From=0;
a.To=100;
a.Duration=10;
//Set up the Storyboard
Storyboard sb=new Storyboard();
sb.Children.Add(a);
sb.Duration=a.Duration;
//Assign animation's target and property. This resulting animation works great.
Storyboard.SetTarget(a, rect);
Storyboard.SetTargetProperty(a, new PropertyPath(Canvas.TopProperty));
//Here's the problem: I can't get the propertypath back with GetTargetProperty
//targetProperty is null.
var targetProperty=Storyboard.GetTargetProperty(a);
//And this line crashes the program. It's only here for debugging purposes.
Storyboard.SetTargetProperty(a, Storyboard.GetTargetProperty(a));
//You need to say canvas.Resources.Add("a unique id in quotes", sb) if you want it to  
//run on a canvas.
return sb;

如有任何帮助,我们将不胜感激。

如何获取动态创建的故事板的目标属性?我的代码只是返回null

PropertyPath可以用DependencyPropertyString初始化。Storyboard如何处理PropertyPath取决于它是如何初始化的。

SetTargetProperty被传递一个已经用DependencyProperty初始化的PropertyPath时,它检索DependencyProperty并丢弃PropertyPath,它使用不同的内部附加属性来存储这个DependencyProperty

只有当SetTargetProperty被分配有已经用字符串初始化的PropertyPath时,它才真正设置附加的属性TargetProperty

不幸的是,CCD_ 15简单地返回CCD_ 16的值,而不管计数器部分CCD_。因此,当用DependencyProperty初始化的PropertyPath调用SetTargetProperty时,GetTargetProperty将返回null,因为TargetProperty值最初从未被实际设置。

如果您将初始化更改为:-

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

然后你的代码就可以工作了。