我在代码中创建了一些按钮,如下所示。
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/