Button的MouseDown事件
WPF的Button控件,滑鼠點選時,MouseDown事件沒有觸發。
經确認,Button的MouseDown被内部處理了。下面是基類ButtonBase的部分代碼:

Mouse的其它事件也是如此:
官網的說明:
是以,MouseDown、MouseUp、MouseLeftButtonDown、MouseLeftButtonUp、MouseMove、MouseEnter、MouseLeave,Button的這些冒泡事件是内部已經處理的。
注:屏蔽Mouse事件的同時,按鈕添加了Click事件和按壓狀态ButtonBase.IsPressed。
添加Button的MouseDowng事件
如何把Button的MouseDown事件添加回來?官網也給出了指導:
我用第二個方案AddHandler,這麼處理的:
1 button.AddHandler(UIElement.MouseUpEvent, new MouseButtonEventHandler(Button_MouseUp), true);
2 button.AddHandler(UIElement.MouseDownEvent, new MouseButtonEventHandler(Button_MouseDown), true);
1 private void Button_MouseDown(object sender, MouseButtonEventArgs e)
2 {
3
4 }
5 private void Button_MouseUp(object sender, MouseButtonEventArgs e)
6 {
7
8 }
要用MouseButtonEventHandler,用MouseEventHandler會提示不比對異常。對應的EventArgs則用MouseButtonEventArgs
至于原因,應該是,MouseDownEvent事件的注冊來源本來就是MouseButton。如下是UIElement滑鼠路由對應的Mouse相關附加事件:
1 /// <summary>
2 /// 辨別 <see cref="E:System.Windows.Input.Mouse.MouseDown" /> 附加事件。
3 /// </summary>
4 /// <returns>
5 /// <see cref="E:System.Windows.Input.Mouse.MouseDown" /> 附加事件的辨別符。
6 /// </returns>
7 public static readonly RoutedEvent MouseDownEvent = EventManager.RegisterRoutedEvent("MouseDown", RoutingStrategy.Bubble, typeof (MouseButtonEventHandler), typeof (Mouse));
作者:唐宋元明清2188
出處:http://www.cnblogs.com/kybs0/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須在文章頁面給出原文連接配接,否則保留追究法律責任的權利。