private static double CalculateTrackOffset(MeteredSlider slider) { double arbitraryScalingFactor = 1.4; // don't like this! double targetOffset = -slider.ActualHeight * slider.SliderPosition / arbitraryScalingFactor; return(targetOffset); }
private static double CalculateThumbSize(MeteredSlider slider) { double distanceFromCenter = Math.Abs(slider.SliderPosition - 0.5); double angleInRadians = Math.Asin(2 * distanceFromCenter * 0.8); double targetSize = Math.Cos(angleInRadians) * FullThumbHeight; return(targetSize); }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { // The value input is not actually used (because the conversion uses properties of the slider, which comes in as the parameter // input), but it should be the slider's Value property, which will force this calculation to be rerun at the right moments. // The parameter input is a MeteredSlider control, or a FrameworkElement whose datacontext is a reference to the whole slider, // either of which must be passed in using x:Reference because binding doesn't work on the parameter input. MeteredSlider slider = (parameter as MeteredSlider) ?? (parameter as FrameworkElement)?.DataContext as MeteredSlider; if (slider == null) { Console.WriteLine("The ModWheelConverters require, as a parameter, a FrameworkElement whose datacontext is a reference to the MeteredSlider control."); return(FullThumbHeight); } double result = _conversion(slider); return(result); }