一 問題的發現
最近項目有個需求,大概是,當點擊某個TextBox時,先執行一些業務上的邏輯處理。
於是按以往思維,將TextBox的MouseDown事件關聯事件處理方法,將業務處理寫在方法里。
調試發現,點擊TextBox時,事件處理方法未執行。
二 問題的原因
通過查閱微軟官方文檔了解到問題原因。
附上文檔鏈接:https://docs.microsoft.com/en-us/previous-versions/dotnet/netframework-3.5/ms750580(v=vs.90)
TextBox內置了處理MouseDown事件的方法,其內部的方法處理完后將事件標記為Handled。
因此,從TextBox中偵聽MouseDown事件的自定義事件處理程序永遠不會被調用。
三 如何解決
3.1 偵聽PreviewMouseDown事件
WPF提供了相應的Preview事件。
3.2 使用AddHandler添加自定義的路由事件。
textBox.AddHandler(TextBox.MouseDownEvent, new MouseButtonEventHandler(textBox_MouseDown), true);