Raise Event on当一个不同的事件被触发时- c#
本文关键字:事件 on Event 一个 Raise | 更新日期: 2023-09-27 18:13:12
我已经在WPF应用程序中创建了自己的Button User控件。
在这种情况下,我试图在另一个事件上引发带有多个事件处理程序的事件。
我有多个事件处理程序附加"MouseUp"事件的视图和业务逻辑(MVVM)。我只是想触发所有附带"MouseUp"事件的处理程序在"KeyUp"上使用"Enter"answers"SpaceBar"
下面是我用来在"KeyUp"上引发"MouseUp"事件的示例代码,如果键是enter或空格
void Button_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.Space || e.Key == Key.Enter)
{
RaiseEvent(new MouseButtonEventArgs(Mouse.PrimaryDevice, 0, MouseButton.Left)
{
RoutedEvent = Mouse.MouseUpEvent,
Source = this,
});
}
}
不确定。我可能错了。但这对我很有效。然而,并非所有情况都是如此。
在某些情况下,事件没有像预期的那样引发。
在我的进一步调查中,我看到键向上事件被触发。但是没有一个事件处理程序在"MouseUp"事件中在某些对象中引发。
有什么优雅的方式来满足我的需要吗?
这打破了任何阅读代码的人的预期模式—为什么在释放键时需要触发mouseup
事件?如果只是为了避免代码重复,你应该有一个单独的方法,mouseup
和keyup
都调用。
根据注释,如果附加了多个事件处理程序,则需要将它们全部附加到两个事件。或者,您可以创建一个元事件处理程序,将所有其他事件作为方法调用,然后将该处理程序附加到每个事件。
只需创建函数并单独处理事件,将引用添加到该函数作为事件处理程序。