/// <summary> /// Updates the value when the thumb position is changed. /// </summary> /// <param name="d">The dependency object providing the property that is changed.</param> /// <param name="e"></param> private static void MaxPositionPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { RangeSlider slider = (RangeSlider)d; if (slider.Orientation == Orientation.Horizontal) { //double o = slider._MaxThumb.ActualWidth + slider._MinThumb.ActualWidth; //double w = slider.ActualWidth - o; //double r = slider.Max - slider.Min; //double f = r / w; //// min pos 0 - 85 //Console.WriteLine($"ACT = {w}"); //Console.WriteLine($"FAC = {f}"); //Console.WriteLine($"VAL = {((slider.MaxPosition - slider._MaxThumb.ActualWidth) * f)}"); slider.MaxValue = ((slider.Max - slider.Min) / (slider.ActualWidth - slider._MinThumb.ActualWidth - slider._MaxThumb.ActualWidth) * (slider.MaxPosition - slider._MaxThumb.ActualWidth)) + slider.Min; slider.Range = (slider.MaxValue - slider.MinValue); } else { slider.MaxValue = (((slider.Max - slider.Min) / (slider.ActualHeight - slider._MinThumb.ActualWidth / 2 - slider._MaxThumb.ActualHeight / 2)) * slider.MaxPosition) + slider.Min; slider.Range = (slider.MaxValue - slider.MinValue); } Console.WriteLine($"MaxValue: {slider.MaxValue}"); Console.WriteLine($"Range: {Math.Floor(slider.Range)}"); }
private static object CoerceMaxValueProperty(DependencyObject d, object baseValue) { RangeSlider slider = (RangeSlider)d; double value = (double)baseValue; value = Math.Min(value, slider.Max); value = Math.Max(value, slider.MinValue); return(value); }
/// <summary> /// Invalidates the thumb position limits. /// </summary> /// <param name="d">The dependency object providing the property to invalidate.</param> /// <param name="baseValue">The value to invalidate.</param> /// <returns>The invalidated value.</returns> private static object CoerceMaxPositionProperty(DependencyObject d, object baseValue) { RangeSlider slider = (RangeSlider)d; double value = (double)baseValue; if (slider.Orientation == Orientation.Horizontal) { value = Math.Min(value, slider.ActualWidth - (slider._MaxThumb.ActualWidth / 2) - slider._MaxThumb.Margin.Right); value = Math.Max(value, slider.MinPosition + (slider._MinThumb.ActualWidth / 2) + (slider._MaxThumb.ActualWidth / 2) + slider._MinThumb.Margin.Left); } else { value = Math.Min(value, slider.ActualWidth - (slider._MaxThumb.ActualWidth)); value = Math.Max(value, slider.MinPosition + (slider._MinThumb.ActualHeight / 2) + (slider._MaxThumb.ActualHeight / 2)); } return(value); }