参考我的旧问题 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.KeyEventHandler
时System.EventHandler
动作。
简而言之,当您用鼠标单击并关闭组合时以及当您通过键入选择值时,我都必须检查某些条件。
由于委托类型不同,因此无法直接分配添加它。但您可以简单地转发它:
cmb.DropDownClosed += action;
cmb.PreviewKeyUp += (sender, e) => action(sender, e);
由于e
属于派生自EventArgs
的KeyEventArgs
类型,因此您可以将其传递给action
。