2010-07-18 21 views
1

我在这样的代码中创建了一些按钮。代码隐藏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]); 

      } 
     } 

通过这样的按钮事件处理函数:

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; 
    } 

而且它给我的错误:

错误1,没有超载的 'SideButton_Click' 匹配委托 'System.EventHandler'

我有点困惑,因为我在这里失踪,任何帮助将不胜感激。谢谢,

安迪

回答

2

Button.Click事件WPF(从ButtonBase继承)不是EventHandler类型 - 这是RoutedEventHandler。我对你得到确切的错误消息有些惊讶,但你应该可以更改您的代码:

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

或者更简单地说:

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

委托方将允许现有的即使第二个参数的类型为EventArgs而不是RoutedEventArgs,方法签名也会转换为RoutedEventHandler

你应该检查一下你是否有合适的using指令 - 确保你真的创建了WPF按钮而不是WinForms按钮。

0

我想你想与此签名的方法:

private void SideButton_Click(object sender, RoutedEventArgs e) 
    { 

    } 

and you can add the handler like this: 

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

没有必要更改方法签名 - 可以使用(object,EventArgs)构造一个'RoutedEventHandler'的方法。诚然,你不会从'RoutedEventArgs'获得额外的信息,但它会编译并运行得很好。 – 2010-07-18 16:10:11