From 520b706ae3c02d02e1a77374e3c9246405afd0b4 Mon Sep 17 00:00:00 2001 From: Mykhailo Davydenko Date: Fri, 28 Mar 2025 22:12:34 +0200 Subject: [PATCH 1/2] Added IsReversed Property --- src/AlohaKit/Controls/Slider/Slider.cs | 35 +++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/src/AlohaKit/Controls/Slider/Slider.cs b/src/AlohaKit/Controls/Slider/Slider.cs index e17fc6f..ed4a024 100644 --- a/src/AlohaKit/Controls/Slider/Slider.cs +++ b/src/AlohaKit/Controls/Slider/Slider.cs @@ -148,6 +148,23 @@ public ThumbShape ThumbShape set => SetValue(ThumbShapeProperty, value); } + public static readonly BindableProperty IsReversedProperty = + BindableProperty.Create(nameof(IsReversed), typeof(bool), typeof(Slider), false, + propertyChanged: (bindableObject, oldValue, newValue) => + { + if (newValue != null && bindableObject is Slider slider) + { + slider.UpdateValue(); + slider.ValueChanged?.Invoke(slider, new ValueChangedEventArgs((double)oldValue, (double)newValue)); + } + }); + + public bool IsReversed + { + get => (bool)GetValue(IsReversedProperty); + set => SetValue(IsReversedProperty, value); + } + public event EventHandler ValueChanged; protected override void OnParentSet() @@ -182,7 +199,7 @@ void UpdateMinimum() if (SliderDrawable == null) return; - SliderDrawable.Minimum = Minimum; + SliderDrawable.Minimum = IsReversed ? Maximum : Minimum; Invalidate(); } @@ -192,7 +209,7 @@ void UpdateMaximum() if (SliderDrawable == null) return; - SliderDrawable.Maximum = Maximum; + SliderDrawable.Maximum = IsReversed ? Minimum : Maximum; Invalidate(); } @@ -203,7 +220,15 @@ void UpdateValue() return; Value = Math.Clamp(Value, Minimum, Maximum); - SliderDrawable.Value = Value; + + double adjustedValue = Value; + + if (IsReversed) + { + adjustedValue = Maximum - (Value - Minimum); + } + + SliderDrawable.Value = adjustedValue; Invalidate(); } @@ -262,7 +287,9 @@ void OnSliderDragInteraction(object sender, TouchEventArgs args) void UpdateValueFromInteraction(PointF touchPoint) { - Value = touchPoint.X * Maximum / Width; + double adjustedTouchPointX = IsReversed ? (Width - touchPoint.X) : touchPoint.X; + + Value = adjustedTouchPointX * Maximum / Width; } } } \ No newline at end of file From f378fce90e8bc819fd670350cb5636217780f02c Mon Sep 17 00:00:00 2001 From: Mykhailo Davydenko Date: Fri, 28 Mar 2025 22:15:49 +0200 Subject: [PATCH 2/2] Added CheckBox for IsReversed Property on sample --- src/AlohaKit.Gallery/Views/SliderView.xaml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/AlohaKit.Gallery/Views/SliderView.xaml b/src/AlohaKit.Gallery/Views/SliderView.xaml index 2ad94a8..d1b6829 100644 --- a/src/AlohaKit.Gallery/Views/SliderView.xaml +++ b/src/AlohaKit.Gallery/Views/SliderView.xaml @@ -125,8 +125,17 @@ - + +