引发不同事件时引发事件 - C#

时间:2015-09-17 12:31:03

标签: c# wpf events c#-4.0

我在WPF应用程序中创建了自己的Button User控件。

在此,我正在尝试在另一个事件上引发附加多个事件处理程序的事件。

我有多个事件处理程序,附带“MouseUp”事件,用于查看和业务逻辑(MVVM)。我只想用“Enter”和“SpaceBar”激活“KeyUp”上附带“MouseUp”事件的所有处理程序

以下是我用来在“KeyUp”上引发“MouseUp”事件的示例代码,如果键是enter或space

 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”事件中的事件处理程序都没有在某些对象中引发。

是否有任何优雅的方式来满足我的需求。

2 个答案:

答案 0 :(得分:4)

这打破了读取代码的人的预期模式 - 为什么在释放密钥时需要触发mouseup事件?如果只是为了避免代码重复,您应该使用mouseupkeyup调用的单独方法。

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

答案 1 :(得分:0)

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