【问题标题】:Slider - snap to point and dragging with events滑块 - 捕捉到点并拖动事件
【发布时间】:2013-01-27 18:09:07
【问题描述】:

当滑块的拇指被拖动到一个新值或单击到一个新值时,我需要触发一个事件。我只希望在值更改时发生此事件是这两种方式,使用鼠标,因此 ValueChanged 事件将不起作用。

【问题讨论】:

    标签: c# wpf events slider


    【解决方案1】:

    你可以试试这个小技巧

    首先您需要将 UpdateSourceTrigger 设置为 Explicit

    <Slider Minimum="0"
            Thumb.DragStarted="Slider_DragStarted"
            Thumb.DragCompleted="Slider_DragCompleted"
            Maximum="{Binding YourMaxBinding, Mode=OneWay}"
            Value="{Binding CurrentPosition, Mode=TwoWay, UpdateSourceTrigger=Explicit}" />
    

    后面的代码

    private void Slider_DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e) {
        // try to prevent updating slider position from your view model
        yourViewModel.DontUpdateSliderPosition = true;
    }
    
    private void Slider_DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e) {
        BindingExpression be = ((Slider)sender).GetBindingExpression(RangeBase.ValueProperty);
        if (be != null) {
          be.UpdateSource();
        }
        yourViewModel.DontUpdateSliderPosition = false;
    }
    

    在您的视图模型中编写代码

    private bool _dontUpdateSliderPosition;
    public bool DontUpdateSliderPosition {
        get {
            return _dontUpdateSliderPosition;
        }
        set {
            if (Equals(value, _dontUpdateSliderPosition)) {
                return;
            }
            _dontUpdateSliderPosition = value;
            yourPropertyChangedFunc("DontUpdateSliderPosition");
        }
    }
    
    private int _currentPosition;
    public int CurrentPosition {
        get {
            return _currentPosition;
        }
        set {
            if (Equals(value, _currentPosition)) {
                return;
            }
            _currentPosition = value;
            yourPropertyChangedFunc("CurrentPosition");
        }
    }
    
    private CodeBehindFuncToChangeTheSliderPosition(){
        if (!DontUpdateSliderPosition) {
            CurrentPosition = theNewPosition;
        }
    }
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-21
      • 2011-07-31
      • 2012-09-10
      • 2014-05-24
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      相关资源
      最近更新 更多