c# - C# WPF 代码隐藏中的按钮处理程序

标签 c# wpf button code-behind

我在代码中创建了一些按钮,如下所示。

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”没有重载与委托(delegate)“System.EventHandler”匹配

我对这里缺少的东西感到有点困惑,任何帮助将不胜感激。谢谢,

安迪

最佳答案

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

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

或更简单地说:

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

即使第二个参数的类型为 EventArgs 而不是 RoulatedEventArgs,委托(delegate)方差仍允许将现有方法签名转换为 RoulatedEventHandler .

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

关于c# - C# WPF 代码隐藏中的按钮处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3276222/

相关文章:

c# - VSTO WPF Outlook 插件 - 随机情况下无响应的用户界面

c# - 旋转图像源?

android - 如何从以前的 Activity 中获取额外信息以设置不同的按钮 Intent ?

button - FancyBox 1.3.4 中未显示关闭按钮

c# - Windows Phone 7.1 应用程序中的自动登录过程

c# - 无法理解异步的行为,在 C# 中等待

c# - 从 Web 方法返回超过 1 项的最佳方法?

c# - 隐藏 gridview 中最后一行的按钮

wpf - 如何在 WPF 中提供字符串文字值作为绑定(bind)

button - Kivy 中的更改颜色按钮