0

スライダーのサムが新しい値にドラッグされるか、ポイントにスナップして新しい値にクリックされたときに、イベントをトリガーする必要があります。マウスを使用して値が変更されたときにのみこのイベントが発生するようにしたいので、ValueChanged イベントは機能しません。

4

1 に答える 1

0

あなたはこのちょっとしたトリックを試すことができます

最初に 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;
    }
}

お役に立てれば

于 2013-01-27T21:22:34.820 に答える