MouseLeftButtonDown和MouseLeftButtonUp是两个经常同时使用的事件,最常用到的恐怕就是处理鼠标拖动,这种时候需要在Down事件中CaptureMouse,而在Up事件中Release。但是我在对一个继承Slider的控件这么做的时候却发现MouseLeftButtonUp事件可以正常触发,而MouseLeftButtonDown怎么也不触发。我开始以为是我的其他哪个代码将其捕获了,经人提示,发现原来Slider不支持该事件——同样的还有Button也不支持此事件。原因是Slider在点击中间的滑块(Thumb)和两边的空白处(RepeatButton)的时候该鼠标事件会被吃掉。
查资料后找到两个方法:
1、使用PreviewMouseDown事件代替,该事件发生于MouseLeftButtonDown发生之前,与之相应的还有PreviewMouseUp事件。网上反映该事件可行,不过我没有试过,因为该事件只在WPF中有,Silverlight不支持该事件。
2、使用AddHandler方法,具体代码为:
_globalProgressSlider.AddHandler(Slider.MouseLeftButtonDownEvent, new MouseButtonEventHandler(Slider_MouseLeftButtonDown), true);
注意第三个参数必须是true,它表示你无论如何也要接收这个事件,即使这个事件已经被标记为Handled。这种方法只能在CS文件中写,在xaml中是无法做到的。
标签:MouseLeftButtonDown,MouseLeftButtonUp,AddHandler,Slider,事件,true From: https://www.cnblogs.com/cdaniu/p/18235948