拖动时如何停止滑块的更新值?

yos*_*rel 10 wpf slider

我有一个滑块,它的值绑定到某个属性,并且属性一直在更新它.在拖动[thumb on]滑块的同时,我想阻止滑块的这个更新值进行绑定,直到用户完成它的拖动.

Slider上有没有任何属性可以做到这一点,或者我需要为此编写代码?

提前致谢!

Ray*_*rns 5

Slider的模板包含一个Thumb,当鼠标移动时,它会引发ThumbDragDelta事件.Slider将在收到ThumbDragDelta事件时立即更新绑定值.

诀窍是停止这个事件.最简单的方法是子类Slider:

public class SliderIgnoreDelta : Slider
{
  protected override void OnThumbDragDelta(DragDeltaEventArgs e)
  {
    // Do nothing
  }
}
Run Code Online (Sandbox Code Playgroud)

在滑块完成拖动之前,此滑块不会更新该值.

另一种解决方案是截取Thumb上的ThumbDragDelta事件.如果你碰巧正在重新模仿Slider,这可能是一个更好的解决方案.例如,如果您已经编写了一个EventBlocker类,在给定的RoutedEvent上设置Handled true,则可以将其放在模板中:

<Track.Thumb>
  <Thumb my:EventBlocker.EventToBlock="{x:Static Thumb.DragDeltaEvent}" />
</Track.Thumb>
Run Code Online (Sandbox Code Playgroud)

但对于大多数情况,你可能想要使用我的第一个解决方案.

  • 似乎在OnThumbDragDelta上什么也不做就会使滑块无法操作(你无法滑动).有趣的是,我认为这曾经很好用. (2认同)
  • 我刚刚尝试了覆盖方法,并遇到了与tofutim相同的问题. (2认同)