我使用以下代码成功安装了事件处理程序:
this.AddHandler(MouseLeftButtonDownEvent, new RoutedEventHandler(tabLabel_MouseLeftButtonDown), true); ...
void tabLabel_MouseLeftButtonDown(object sender, EventArgs e)
{
this.IsSelected = true;
}
Run Code Online (Sandbox Code Playgroud)
现在我尝试使用 Lambda 表达式使代码更加紧凑,如下所示:
this.AddHandler(MouseLeftButtonDownEvent, (s, e) => { this.IsSelected = true; }, true);
Run Code Online (Sandbox Code Playgroud)
它给了我错误消息:
无法将 lambda 表达式转换为类型“System.Delegate”,因为它不是委托类型。
我不知道该怎么做。有可能吗?
this.AddHandler(MouseLeftButtonDownEvent, new RoutedEventHandler((sender,e) => this.IsSelected=true), true);
Run Code Online (Sandbox Code Playgroud)
出现问题的原因是编译器知道 AddHandler 的第二个参数是 System.Delegate 类型,它是抽象的。如果没有具体类型,它就无法推断 lambda 中参数的类型。
我们不必在这里使用 RoutedEventHandler,我们可以创建具有相同签名的东西:Action<object,EventArgs>这也可以,但上面的版本更短。
this.AddHandler(MouseLeftButtonDownEvent, new Action<object,EventArgs>((sender, e) => IsSelected = true), true);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
790 次 |
| 最近记录: |