如何在Slider中使用MouseLeftButtonDown事件

来源:互联网 发布:知乎日报中不支持阅读 编辑:程序博客网 时间:2024/06/08 13:57

by linfei 24. 十一月 2009 18:50

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中是无法做到的。

原创粉丝点击