如何使用使用 lambda 表达式创建的同一事件处理程序订阅两个不同的事件?



参考我的旧问题 WPF 如何将同一事件 lambda 表达式分配给两个不同的元素

我现在的需求略有不同。 我必须使用相同的 lambda 操作订阅不同类型的事件:

EventHandler action = (sender2,args) =>
{
var cmbChanged = sender2 as ComboBox;
//...check...
};

cmb.DropDownClosed += action;
cmb.PreviewKeyUp += action; // <----- compiler error here

但是编译器正确地说,在这里我需要System.Window.Input.KeyEventHandlerSystem.EventHandler动作。

简而言之,当您用鼠标单击并关闭组合时以及当您通过键入选择值时,我都必须检查某些条件。

由于委托类型不同,因此无法直接分配添加它。但您可以简单地转发它:

cmb.DropDownClosed += action;
cmb.PreviewKeyUp += (sender, e) => action(sender, e);

由于e属于派生自EventArgsKeyEventArgs类型,因此您可以将其传递给action

相关内容

  • 没有找到相关文章

最新更新