wpf - 拖动时如何停止 slider 的更新值?

标签 wpf slider

我有 slider ,它的值绑定(bind)到某个属性,并且该属性一直在更新它。
在拖动 [thumb on] slider 时,我想阻止 slider 的此更新值绑定(bind),
直到用户完成它的拖动。

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

提前致谢!

最佳答案

Slider 的模板包括一个 Thumb,它会在鼠标移动时引发 ThumbDragDelta 事件。当 Slider 收到 ThumbDragDelta 事件时,它总是会立即更新绑定(bind)值。

诀窍是阻止此事件。最简单的方法是继承 Slider:

public class SliderIgnoreDelta : Slider
{
  protected override void OnThumbDragDelta(DragDeltaEventArgs e)
  {
    // Do nothing
  }
}

在拇指拖动完成之前,此 slider 不会更新值。

另一种解决方案是拦截 Thumb 上的 ThumbDragDelta 事件。如果您碰巧重新模板化 Slider,这可能是一个更好的解决方案。例如,如果您已经编写了一个 EventBlocker 类,在给定的 RoutedEvent 上将 Handled 设置为 true,则可以将其放入模板中:
<Track.Thumb>
  <Thumb my:EventBlocker.EventToBlock="{x:Static Thumb.DragDeltaEvent}" />
</Track.Thumb>

但在大多数情况下,您可能希望使用我的第一个解决方案。

关于wpf - 拖动时如何停止 slider 的更新值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4146856/

相关文章:

wpf - 绑定(bind)到 View 模型中的可见性是一个好的设计吗

jquery - HTML 范围 slider 和 jQuery?

jquery - 如何使用 jQuery 单击按钮时暂停 YouTube 视频?

javascript - 为什么 slider 插件在准备生成之前显示?

c# - 如何单击折叠的 WPF 扩展器后面的内容?

c# - 同一个 ResourceDictionary 的多个实例

javascript - JS 禁止触发事件

iphone - 如何在我的应用程序中创建 "Slide to Activate"?

c# - 当其 DataContext 更改时,具有数据模板化 ContentControl 的 UserControl 会引发绑定(bind)错误

c# - 在触发器中检查窗口的 "WindowState"的值