public bool SetValue(float value)
{
value = Snap(Clamp((float)Math.Round(value / _stepSize) * _stepSize));
float oldValue = _value;
if (value == oldValue)
return false;
float oldVisualValue = VisualValue;
_value = value;
bool cancelled = OnValueChanged(oldValue, value);
if (cancelled)
_value = oldValue;
else if (_animateDuration > 0) {
_animateFromValue = oldVisualValue;
_animateTime = _animateDuration;
}
return !cancelled;
}