WPF Button MouseDown事件


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));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM