Мне нужно вызвать событие, когда ползунок ползунка либо перетаскивается на новое значение, либо щелкается до нового значения с привязкой к точке. Я хочу, чтобы это событие происходило только при изменении значения этими двумя способами с использованием мыши, поэтому событие ValueChanged не сработает.
Ползунок - привязка к точке и перетаскивание с событиями
Ответы (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