目标:
处理鼠标左键单击和鼠标右键单击。
问题:
单击鼠标右键时未引发 Click 事件。仅当按下鼠标左键然后松开时才会升高。
解决方案:
- 订阅 Click 和 MouseRightButtonUp 事件。
注意 A. MouseRightButtonUp 事件在鼠标右键在按钮上释放时引发,无论最初按下时它是否在按钮上。
注意 B.它与这种情况无关,但您应该注意 Button 对象的 Click 事件(按下和释放鼠标左键)同时处理 MouseLeftButtonDown 和 MouseLeftButtonUp 事件,因此这些事件都不能当您使用鼠标左键单击 Button 对象时处理。如果您确实需要单独处理这些操作,您应该订阅 PreviewMouseLeftButtonDown 和/或 PreviewMouseLeftButtonUp。
然后,您可以:
一个。有 2 个独立的事件处理程序,每个事件处理一个,或者
湾。编写一个可以同时处理 Click 和 MouseRightButtonUp 事件的事件处理程序。注意:Click 事件需要一个接受 RoutedEventArgs 类型参数的处理程序,而 MouseRightButtonUp 事件需要 MouseButtonEventArgs 类型之一。RoutedEventArgs 和 MouseButtonEventArgs 都继承自 EventArgs。因此,让处理程序接受 EventArgs。然后,处理程序应确定它是否已传递 RoutedEventArgs(在这种情况下,它执行左键单击所需的操作)或 MouseButtonEventArgs(在这种情况下,它执行右键单击所需的操作)。
代码示例:
myButton.MouseRightButtonUp += MenuItemButton_Click;
myButton.Click += MenuItemButton_Click;
internal void MenuItemButton_Click(object sender, EventArgs e)
{
var clickedButton = sender as Button;
string EventArgsType = e.GetType().ToString();
//Remove leading qualification from Type ("System.Windows." or "System.Windows.Input.")
EventArgsType = type.Substring(EventArgsType.LastIndexOf('.') + 1);
switch (EventArgsType)
{
//Handle R-Click (RightMouseButtonUp)
case "MouseButtonEventArgs":
var MbeArgs = e as MouseButtonEventArgs;
//Do stuff
break;
//Handle L-Click (Click)
case "RoutedEventArgs":
var ReArgs = e as RoutedEventArgs;
//Do stuff
break;
default:
break;
}
}