我使用此代码成功安装了事件处理程序:
this.AddHandler(MouseLeftButtonDownEvent, new RoutedEventHandler(tabLabel_MouseLeftButtonDown), true); ...
void tabLabel_MouseLeftButtonDown(object sender, EventArgs e)
{
this.IsSelected = true;
}
现在我尝试使用像这样的Lambda表达式使代码更紧凑:
this.AddHandler(MouseLeftButtonDownEvent, (s, e) => { this.IsSelected = true; }, true);
它给出了错误消息:
无法将lambda表达式转换为' System.Delegate'因为它不是委托类型。
我无法弄清楚应该怎么做。它有可能吗?
答案 0 :(得分:4)
this.AddHandler(MouseLeftButtonDownEvent, new RoutedEventHandler((sender,e) => this.IsSelected=true), true);
问题出现是因为编译器知道AddHandler的第二个参数是System.Delegate类型,它是抽象的。没有具体类型,它无法推断lambda中参数的类型。
我们不必在这里使用RoutedEventHandler,我们可以创建具有相同签名的内容:Action<object,EventArgs>
也可以使用,但上面的版本更短。
this.AddHandler(MouseLeftButtonDownEvent, new Action<object,EventArgs>((sender, e) => IsSelected = true), true);