C#WPF背后的代码中的Button Handler

时间:2010-07-18 16:04:52

标签: c# wpf button code-behind

我在Code中创建了一些按钮。

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

答案 0 :(得分:2)

WPF中的Button.Click事件(继承自ButtonBase)不属于EventHandler类型 - 它是RoutedEventHandler。我对您收到的确切错误消息感到有些惊讶,但您应该能够将代码更改为:

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

或更简单:

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

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

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

答案 1 :(得分:0)

我想你想要一个带有这个签名的方法:

    private void SideButton_Click(object sender, RoutedEventArgs e)
    {

    }

and you can add the handler like this:

sideBarButtons[i].Click += SideButton_Click;