Плъзгач - прилепване към точка и плъзгане със събития

Трябва да задействам събитие, когато палецът на плъзгач бъде или плъзнат до нова стойност, или щракнат до нова стойност с прилепване към точка. Искам това събитие да се случи само когато стойността се промени по тези два начина, използвайки мишката, така че събитие ValueChanged няма да работи.


person Wilson    schedule 27.01.2013    source източник


Отговори (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;
    }
}

Надявам се това да помогне

person punker76    schedule 27.01.2013