使用IsMoveToPointEnabled处理滑块拇指拖动

时间:2018-06-15 01:36:37

标签: c# wpf

在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。

在媒体播放器搜索栏中,当您松开拇指时,这会导致搜索操作(或几分之一秒导致小的视觉故障),然后在您释放它时再次搜索。有没有更好的方法来处理这个?

1 个答案:

答案 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;
}