如何获取动态创建的故事板的目标属性?我的代码只是返回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;
如有任何帮助,我们将不胜感激。
PropertyPath
可以用DependencyProperty
或String
初始化。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)"));
然后你的代码就可以工作了。