C#WPF最佳重载匹配错误

时间:2014-02-14 15:37:48

标签: c# wpf animation

我使用以下代码:

 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#? 感谢。

4 个答案:

答案 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