【问题标题】:Button Handler in codebehind C# WPF代码隐藏 C# WPF 中的按钮处理程序
【发布时间】:2010-07-19 00:25:49
【问题描述】:

我在这样的代码中创建了一些按钮。

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'

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

安迪

【问题讨论】:

    标签: c# wpf button code-behind


    【解决方案1】:

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

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

    或更简单地说:

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

    即使第二个参数的类型是 EventArgs 而不是 RoutedEventArgs,代理变量也将允许您将现有方法签名转换为 RoutedEventHandler

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

    【讨论】:

      【解决方案2】:

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

          private void SideButton_Click(object sender, RoutedEventArgs e)
          {
      
          }
      
      and you can add the handler like this:
      
      sideBarButtons[i].Click += SideButton_Click;
      

      【讨论】:

      • 无需更改方法签名 - 采用 (object, EventArgs) 的方法可用于构造RoutedEventHandler。诚然,您不会从RoutedEventArgs 获得更多信息,但它会编译并运行得很好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      • 2015-02-16
      • 1970-01-01
      • 2012-08-19
      • 1970-01-01
      相关资源
      最近更新 更多