2010-07-18 54 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