我在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”事件中的事件处理程序都没有在某些对象中引发。
是否有任何优雅的方式来满足我的需求。
答案 0 :(得分:4)
这打破了读取代码的人的预期模式 - 为什么在释放密钥时需要触发mouseup
事件?如果只是为了避免代码重复,您应该使用mouseup
和keyup
调用的单独方法。
根据评论,如果您附加了多个事件处理程序,则需要将所有事件处理程序附加到这两个事件。或者,您可以创建一个元事件处理程序,将所有其他作为方法调用,然后将其附加到每个事件。
答案 1 :(得分:0)
只需创建函数并单独处理事件,将此函数的引用添加为事件处理程序。