无法在c#中隐式转换类型'System.EventHandler'为'System.Windows.RoutedEventHandler'

时间:2014-05-27 07:20:41

标签: c# windows-phone-8

在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

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

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

以下是按钮的点击事件方法:

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

我不明白为什么会出现这个错误。 请建议我,等待回复。 感谢。

3 个答案:

答案 0 :(得分:8)

您的事件处理程序的签名是错误的。

应该是:

private void btn_Click(object sender, RoutedEventArgs e)

Click事件分配应更改为:

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

答案 1 :(得分:1)

您需要使用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 and Loaded。

     

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

链接到msdn

答案 2 :(得分:0)

按钮点击是Patrick Hofman提到的路由事件。

如果只是写作不想要新活动,你甚至可以缩短 btn.Click + = btn_Click;