不能隐式转换类型'System.EventHandler'& # 39; System.Windows.

本文关键字:System Windows EventHandler 转换 不能 类型 | 更新日期: 2023-09-27 18:05:13

在windows phone应用程序中,我想动态地添加一个按钮,如下所示:

Button btn = new Button();
btn.Content = tb_groupname.Text;
btn.Width = 200;
btn.Height = 200;
btn.Click += new EventHandler(btn_Click);//Click event

但是当我在我的按钮上添加点击事件时,我得到以下错误:

Cannot implicitly convert type 'System.EventHandler' to 'System.Windows.RoutedEventHandler'

下面是按钮的click事件方法:

private void btn_Click(object sender, EventArgs e)
{
  textbox1.text = "ABC"; // For Example
}

我不明白为什么它得到这个错误。请建议我,等待回复。谢谢。

不能隐式转换类型'System.EventHandler'& # 39; System.Windows.

事件处理程序签名错误。

应该是:

private void btn_Click(object sender, RoutedEventArgs e)

Click事件赋值改为:

btn.Click += new RoutedEventHandler(btn_Click);//Click event

您需要使用RoutedEventHandler(在System.Windows组件上找到)。

在您的情况下,您应该能够将btn.Click += new EventHandler(btn_Click);更改为btn.Click += new System.Windows.RoutedEventHandler(btn_Click);;然后将EventArgs ob btn_Click更改为RoutedEventArgs

确保您添加了System.Windows程序集的引用,否则它将无法编译!

查看MSDN,我得到了这个:

RoutedEventHandler委托用于任何路由事件不报告事件数据中特定于事件的信息。有许多这样的路由事件;突出的例子包括Click和Loaded。

为路由处理程序编写处理程序之间最值得注意的区别事件,而不是一般的公共语言运行时(CLR)事件事件的发送者(处理程序所在的元素)附加和调用)不能被认为是必然的事件的来源。源被报告为事件中的属性数据(源)。发送方和源之间的差异是的遍历期间,被路由到不同元素的事件通过元素树路由事件。

msdn链接

按钮点击是路由事件,如Patrick Hofman所述。

你甚至可以缩短如果不想要新的事件,只需写btn。点击+= btn_Click;