Net Core WPF中使用 MouseLeftButtonDown和MouseLeftButtonUp,发现后台不执行,也就是无法触发。我本来是这样写的两个事件
btn.MouseLeftButtonDown += btn_MouseLeftButtonDown;
btn.MouseLeftButtonUp += btn_MouseLeftButtonUp;
查了一些资源发现原来它将MouseLeftButtonDown事件转换成了Click事件。如果确实要使用这两个事件可以改成如下方式:
btn.AddHandler(Button.MouseLeftButtonDownEvent, new MouseButtonEventHandler(btn_MouseLeftButtonDown),true);
btn.AddHandler(Button.MouseLeftButtonUpEvent, new MouseButtonEventHandler(btn_MouseLeftButtonUp), true);
然后发现这两个事件能正常执行了。
原因说明
WPF 的 Button 内部会把 MouseLeftButtonDown / Up 转换为 Click 事件,因此直接订阅这两个事件可能不会被触发。
解决办法
- 用 AddHandler 订阅路由事件:btn.AddHandler(Button.MouseLeftButtonDownEvent, new MouseButtonEventHandler(Handler), true)。
- 第三个参数 true 表示即使事件已被处理也接收(handledEventsToo)。
- 也可改用 PreviewMouseLeftButtonDown / Up(隧道事件)。
- 若只是要响应点击,直接订阅 Click 即可。