天天看點

WPF Button MouseDown事件

Button的MouseDown事件 

WPF的Button控件,滑鼠點選時,MouseDown事件沒有觸發。

經确認,Button的MouseDown被内部處理了。下面是基類ButtonBase的部分代碼:

WPF Button MouseDown事件

Mouse的其它事件也是如此:

WPF Button MouseDown事件

官網的說明:

WPF Button MouseDown事件

是以,MouseDown、MouseUp、MouseLeftButtonDown、MouseLeftButtonUp、MouseMove、MouseEnter、MouseLeave,Button的這些冒泡事件是内部已經處理的。 

注:屏蔽Mouse事件的同時,按鈕添加了Click事件和按壓狀态ButtonBase.IsPressed。

添加Button的MouseDowng事件

如何把Button的MouseDown事件添加回來?官網也給出了指導:

WPF 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/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須在文章頁面給出原文連接配接,否則保留追究法律責任的權利。