2010-07-18 3 views
1

J'ai créé des boutons dans le code comme ceci.Button Handler dans codebehind C# WPF

if (infoLoader.categoriesLoaded) 
     { 
      sideBarButtons = new Button[infoLoader.categoriesLength]; 
      for (int i = 0; i < sideBarButtons.Length; i++) 
      { 
       sideBarButtons[i] = new Button(); 
       sideBarButtons[i].Content = infoLoader.categories[i].name; 
       Canvas.SetLeft(sideBarButtons[i], 30); 
       Canvas.SetTop(sideBarButtons[i], 110 + (40 * i)); 
       sideBarButtons[i].Click += new EventHandler(this.SideButton_Click); 
       leftSideBar.Children.Add(sideBarButtons[i]); 

      } 
     } 

Avec la fonction de gestion des événements de bouton comme ceci:

private void SideButton_Click(object sender, EventArgs e) 
    { 
     // Uhh 
     Console.WriteLine("The Button has been clicked."); 
     mainText.Text = infoLoader.games[0].id.ToString() + ", " + infoLoader.games[0].name + ": " + infoLoader.games[0].description; 
     MainLaunchBtn.Content = "Launch " + infoLoader.games[0].name; 
    } 

Et il me donne l'erreur:

Erreur 1 Pas de surcharge pour délégué matches 'SideButton_Click' 'System.EventHandler'

Je suis un peu confus quant à ce qui me manque ici, et toute aide serait appréciée. Merci,

Andy

Répondre

2

L'événement Button.Click dans WPF (hérité de ButtonBase) n'est pas de type EventHandler - il est RoutedEventHandler. Je suis un peu surpris par le message d'erreur exact que vous obtenez, mais vous devriez être en mesure de changer votre code:

sideBarButtons[i].Click += new RoutedEventHandler(this.SideButton_Click); 

ou plus simplement:

sideBarButtons[i].Click += this.SideButton_Click; 

variance délégué permettra à votre existante signature de méthode à convertir en RoutedEventHandler même si le second paramètre est de type EventArgs au lieu de RoutedEventArgs.

Vous devez vérifier que vous avez les bonnes directives using - assurez-vous que vous créez réellement des boutons WPF au lieu de boutons WinForms.

0

Je pense que vous voulez une méthode avec cette signature:

private void SideButton_Click(object sender, RoutedEventArgs e) 
    { 

    } 

and you can add the handler like this: 

sideBarButtons[i].Click += SideButton_Click; 
+0

Il n'est pas nécessaire de changer la signature de méthode - une méthode qui prend (object, EventArgs) peut être utilisée pour construire un 'RoutedEventHandler'. Certes, vous n'obtiendrez pas les informations supplémentaires de 'RoutedEventArgs', mais il compilera et fonctionnera très bien. –