我使用以下代码:
private void AddEnemy()
{
ContentControl enemy = new ContentControl();
enemy.Template = Resources["EnemyTemplate"] as ControlTemplate;
AnimateEnemy(enemy, 0, playArea.ActualWidth - 100, "(Canvas.Left)");
AnimateEnemy(enemy, random.Next((int)playArea.ActualHeight - 100),
random.Next((int)playArea.ActualHeight - 100), "(Canvas.Top)");
playArea.Children.Add(enemy);
}
private void AnimateEnemy(ContentControl enemy, double from, double to, string propertyToAnimate)
{
Storyboard storyboard = new Storyboard() { AutoReverse = true, RepeatBehavior = RepeatBehavior.Forever };
DoubleAnimation animation = new DoubleAnimation()
{
From = from,
To = to,
Duration = new Duration(TimeSpan.FromSeconds(random.Next(4, 6)))
};
Storyboard.SetTarget(animation, enemy);
Storyboard.SetTargetProperty(animation, propertyToAnimate);
storyboard.Children.Add(animation);
storyboard.Begin();
}
}
但是,当我想编译它时,我收到以下错误:
错误1最佳重载方法匹配' System.Windows.Media.Animation.Storyboard.SetTargetProperty(System.Windows.DependencyObject,System.Windows.PropertyPath)' c:\ users \ amin \ documents \ visual studio 2013 \ Projects \ SaveTheHumans \ SaveTheHumans \ MainWindow.xaml.cs 58 13 SaveTheHumans
为该行:
Storyboard.SetTargetProperty(animation, propertyToAnimate);
你能否告诉我如何解决错误并解释问题的原因,因为我正在学习c#? 感谢。
答案 0 :(得分:0)
系统要求您提供依赖对象来验证绑定,这可能是:
Canvas.LeftProperty
确保动画运行的更好方法是使用SetTargetName属性而不是SetTarget,
这是一篇显示示例Storyboard targetting multiple objects, using SetTarget method, doesn't work
的帖子祝你的c#努力好运。
答案 1 :(得分:0)
我对您的使用情况了解不多,但可以告诉您错误的含义。这是更高级别的,无论您尝试实施什么,都可以随时看到这种类型的错误......
它说SetTargetProperty没有签名,它接受你提供的参数的数量和类型。它告诉你发现的关闭匹配在System.Windows.DependencyObject和System.Windows.PropertyPath中;你传递的是DoubleAnimation和一个字符串。您可能需要传递不同的参数,不同数量的参数,或者在传递参数之前以某种方式转换或转换参数。查看SetTargetProperty方法的重载签名,以确定它可以接受的内容。
答案 2 :(得分:0)
我们只需要使用PropertyPath。它对我有用。
Storyboard.SetTarget(animation, enemy);
PropertyPath pp = new PropertyPath(propertyToAnimate);
Storyboard.SetTargetProperty(animation, pp);
答案 3 :(得分:0)
您可以使用:
Storyboard.SetTargetProperty(animation, new PropertyPath(propertyToAnimate));
而不是:
Storyboard.SetTargetProperty(animation, propertyToAnimate);
目前,方法Storyboard.SetTargetProperty()
将对象PropertyPath作为第二个参数而不是字符串(如前所述)。但是您可以使用该字符串new PropertyPath(string path)
获取对象PropertyPath。
您可以下载" WPF指南首选C#"克服WPF和XAML App之间的这些差异: http://cdn.oreilly.com/oreilly/pdfs/hfcsharp3e_WPF_download.pdf