为 RoutedEventHandler 使用 Lambda 表达式
Using Lambda Expressions for RoutedEventHandler
我正在使用以下代码成功安装事件处理程序:
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);
它给我错误信息:
Cannot convert lambda expression to type 'System.Delegate' because it is not a delegate type.
我不知道应该怎么做。有可能吗?
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);
我正在使用以下代码成功安装事件处理程序:
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);
它给我错误信息:
Cannot convert lambda expression to type 'System.Delegate' because it is not a delegate type.
我不知道应该怎么做。有可能吗?
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);