在WPF中,我能够通过使用此功能捕获具有IsMoveToPointEnabled的Slider中的鼠标点击(否则事件不会触发)
SeekBar.AddHandler(Slider.PreviewMouseDownEvent, new MouseButtonEventHandler(base.SeekBar_PreviewMouseLeftButtonDown), true);
SeekBar.AddHandler(Slider.PreviewMouseDownEvent, new MouseButtonEventHandler(base.SeekBar_PreviewMouseLeftButtonUp), true);
现在我在追踪拇指拖动方面遇到了更多问题。我正在听DragStarted和DragCompleted。问题是,当您单击Thumb时,它会按以下顺序引发事件:PreviewMouseLeftButtonDown,PreviewMouseLeftButtonUp和DragStarted。
在媒体播放器搜索栏中,当您松开拇指时,这会导致搜索操作(或几分之一秒导致小的视觉故障),然后在您释放它时再次搜索。有没有更好的方法来处理这个?
答案 0 :(得分:0)
我不知道是否有更好的方法,但我最后通过检查它是否在Thumb上来放弃鼠标点击。
public void SeekBar_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
// Only process event if click is not on thumb.
Thumb Obj = GetSliderThumb(sender as Slider);
Point Pos = e.GetPosition(Obj);
if (Pos.X < 0 || Pos.Y < 0 || Pos.X > Obj.ActualWidth || Pos.Y > Obj.ActualHeight) {
// Immediate seek when clicking elsewhere.
}
}
public Thumb GetSliderThumb(Slider obj) {
var track = obj.Template.FindName("PART_Track", obj) as Track;
return track?.Thumb;
}