J'ai travaillé sur un projet en WPF C # et j'essaie d'animer une image pour qu'elle se déplace vers le bas. J'ai trouvé la fonction "MoveTo" sur Internet et quand je l'ai collée dans le code, l'erreur s'est produite.

Public partial class Window1: Window
{
    public static int w = 1;

    public Window1()
    {
        InitializeComponent();

    }

    public void MoveTo(this Image target, double newY)
    {
        var top = Canvas.GetTop(target);
        TranslateTransform trans = new TranslateTransform();
        target.RenderTransform = trans;
        DoubleAnimation anim1 = new DoubleAnimation(top, newY - top, TimeSpan.FromSeconds(10));
        trans.BeginAnimation(TranslateTransform.XProperty, anim1);
    }

    private void button_Click(object sender, RoutedEventArgs e)
    {
        MoveTo(image, 130);
    }
}

Que dois-je faire pour résoudre ce problème?

4
Gal Didi 24 janv. 2017 à 13:36

4 réponses

Meilleure réponse

public void MoveTo (cette image cible, double newY)

this sur le premier argument d'une définition de méthode indique une méthode d'extension qui, comme le dit le message d'erreur, n'a de sens que sur une classe statique non générique. Votre classe n'est pas statique.

Cela ne semble pas être quelque chose qui a du sens en tant que méthode d'extension, car il agit sur l'instance en question, alors supprimez le this.

15
Jon Hanna 24 janv. 2017 à 11:36

Veuillez google d'abord la prochaine fois

https://msdn.microsoft.com/en-us/library/bb397656.aspx

Les méthodes d'extension doivent être définies dans une classe statique. Supprimez le mot clé this de la signature de méthode "MoveTo".

Cette:

public void MoveTo(this Image target, double newY)

Devrait être comme ceci:

public void MoveTo(Image target, double newY)
1
shahar eldad 26 janv. 2017 à 09:02

Ajoutez le mot-clé static à la déclaration de classe:

public static class ClassName{}
0
Nag 24 janv. 2017 à 10:57

MoveTo est une méthode d'extension - c'est juste un sucre syntaxique pour une fonction statique, vous pouvez donc appeler

image.MoveTo(2.0)

Au lieu de

SomeUtilityClass.MoveTo(image, 2.0)

Cependant, les méthodes d'extension doivent être placées dans une classe statique, vous ne pouvez donc pas la placer dans votre classe Window. Vous pouvez simplement omettre le mot-clé "this" dans la déclaration et l'utiliser comme une méthode statique ou vous devez déplacer la méthode vers une classe statique.

1
Paweł Słowik 24 janv. 2017 à 10:41