当前位置:  开发笔记 > 编程语言 > 正文

WPF - 如何在拖动时更新滑块的值

如何解决《WPF-如何在拖动时更新滑块的值》经验,为你挑选了1个好方法。

你可能会说它是如何在拖动时停止更新滑块值的重复?但老实说,解决方案从2011年开始,并没有为我工作(甚至评论了其他用户接受的答案),其他答案与我无关.所以请耐心等待.

这是我的问题:我有一个绑定到这样的值的滑块:


这就是价值:

        private double _audioValue;
        public double AudioValue
        {
            get { return _audioValue; }
            set
            {
                if (_audioValue == value)
                    return;
                _audioValue = value;
                SendPacket(cockpitType, (byte)Index.AudioSlider, (byte)_audioValue);
                OnPropertyChanged("AudioValue");
            }
        }

正如您所看到的,每次值发生变化时我都会发送一个数据包,当它更新拖动值时,它只是在服务器上发送垃圾邮件,这是必须要防止的.

我试图将滑块绑定到一个函数(mouseUp),但我无法通过这种方式获取值.

任何想法我能做什么?

非常感谢.

编辑:

这里的答案WPF:在用户拖动后触发事件的滑块对我没有帮助,因为它是数据模板中生成的滑块,事件与我无关.



1> Szabolcs Déz..:

如果您使用的是WPF 4.5,则可以使用

Value="{Binding AudioValue, Delay=500}"

这将限制更改通知.如果用户快速拖动滑块,这将"重置"内部计时器并将丢弃挂起的通知.当用户停止并且500毫秒延迟结束时,它将调用您的setter方法一次.

有很多方法可以做到这一点,所以这只是一个建议.您可以在VM中使用Rx及其Throttle方法执行此操作.这基本上BindingDelay房产一样.

我有一个问题,就是只覆盖OnThumbDragCompleted其他答案中建议的方法.这意味着只有在Slider通过拖动拇指进行操作时才会传播更改.例如,如果单击拇指旁边的,则不会通知您的属性.基本上,我的意思是,你必须确保它的值同步,Value并且FinalValue如果你与你来自哪里,得到的解决方案去Slider.

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有