- A+
所属分类:.NET技术
一 问题的发现
最近项目有个需求,大概是,当点击某个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);