我有 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/