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"事件中在某些对象中引发。

有什么优雅的方式来满足我的需要吗?

Raise Event on当一个不同的事件被触发时- c#

这打破了任何阅读代码的人的预期模式—为什么在释放键时需要触发mouseup事件?如果只是为了避免代码重复,你应该有一个单独的方法,mouseupkeyup都调用。

根据注释,如果附加了多个事件处理程序,则需要将它们全部附加到两个事件。或者,您可以创建一个元事件处理程序,将所有其他事件作为方法调用,然后将该处理程序附加到每个事件。

只需创建函数并单独处理事件,将引用添加到该函数作为事件处理程序。