1- namespace Maui . Controls . Sample ;
1+ using System . ComponentModel ;
2+ using System . Runtime . CompilerServices ;
23
3- public partial class MainPage : ContentPage
4+ namespace Maui . Controls . Sample ;
5+
6+ public partial class MainPage : ContentPage , INotifyPropertyChanged
47{
8+ private double _sliderMin = 10 ;
9+ private double _sliderMax = 100 ;
10+ private double _sliderValue = 50 ;
11+ private double _stepperMin = 10 ;
12+ private double _stepperMax = 100 ;
13+ private double _stepperValue = 50 ;
14+
15+ public double SliderMin
16+ {
17+ get => _sliderMin ;
18+ set { _sliderMin = value ; OnPropertyChanged ( ) ; }
19+ }
20+
21+ public double SliderMax
22+ {
23+ get => _sliderMax ;
24+ set { _sliderMax = value ; OnPropertyChanged ( ) ; }
25+ }
26+
27+ public double SliderValue
28+ {
29+ get => _sliderValue ;
30+ set { _sliderValue = value ; OnPropertyChanged ( ) ; }
31+ }
32+
33+ public double StepperMin
34+ {
35+ get => _stepperMin ;
36+ set { _stepperMin = value ; OnPropertyChanged ( ) ; }
37+ }
38+
39+ public double StepperMax
40+ {
41+ get => _stepperMax ;
42+ set { _stepperMax = value ; OnPropertyChanged ( ) ; }
43+ }
44+
45+ public double StepperValue
46+ {
47+ get => _stepperValue ;
48+ set { _stepperValue = value ; OnPropertyChanged ( ) ; }
49+ }
50+
551 public MainPage ( )
652 {
53+ Console . WriteLine ( "=== SANDBOX: MainPage Constructor START ===" ) ;
54+ BindingContext = this ;
755 InitializeComponent ( ) ;
56+ Console . WriteLine ( $ "=== SANDBOX: After InitializeComponent - Slider Value: { SliderValue } , Stepper Value: { StepperValue } ===") ;
57+ ValidateInitialState ( ) ;
58+ }
59+
60+ private void ValidateInitialState ( )
61+ {
62+ Console . WriteLine ( "=== SANDBOX: Validating Initial State ===" ) ;
63+ bool sliderValid = Math . Abs ( SliderValue - 50 ) < 0.01 ;
64+ bool stepperValid = Math . Abs ( StepperValue - 50 ) < 0.01 ;
65+
66+ Console . WriteLine ( $ "Slider - Min: { SliderMin } , Max: { SliderMax } , Value: { SliderValue } (Expected: 50, Valid: { sliderValid } )") ;
67+ Console . WriteLine ( $ "Stepper - Min: { StepperMin } , Max: { StepperMax } , Value: { StepperValue } (Expected: 50, Valid: { stepperValid } )") ;
68+
69+ if ( sliderValid && stepperValid )
70+ {
71+ ValidationStatusLabel . Text = "✅ All tests PASSED - Values correctly preserved!" ;
72+ ValidationStatusLabel . TextColor = Colors . Green ;
73+ Console . WriteLine ( "=== SANDBOX: ✅ VALIDATION PASSED ===" ) ;
74+ }
75+ else
76+ {
77+ ValidationStatusLabel . Text = $ "❌ FAILED - Slider: { SliderValue } (expected 50), Stepper: { StepperValue } (expected 50)";
78+ ValidationStatusLabel . TextColor = Colors . Red ;
79+ Console . WriteLine ( "=== SANDBOX: ❌ VALIDATION FAILED ===" ) ;
80+ }
81+ }
82+
83+ private void OnTestValueMinMax ( object sender , EventArgs e )
84+ {
85+ Console . WriteLine ( "=== SANDBOX: Testing Order - Value → Min → Max ===" ) ;
86+ var slider = new Slider ( ) ;
87+ slider . Value = 50 ;
88+ slider . Minimum = 10 ;
89+ slider . Maximum = 100 ;
90+
91+ bool passed = Math . Abs ( slider . Value - 50 ) < 0.01 ;
92+ Console . WriteLine ( $ "Result: Value={ slider . Value } (Expected: 50, Passed: { passed } )") ;
93+
94+ ValidationStatusLabel . Text = passed ? "✅ Value→Min→Max: PASSED" : $ "❌ Value→Min→Max: FAILED (Got { slider . Value } )";
95+ ValidationStatusLabel . TextColor = passed ? Colors . Green : Colors . Red ;
96+ }
97+
98+ private void OnTestMinValueMax ( object sender , EventArgs e )
99+ {
100+ Console . WriteLine ( "=== SANDBOX: Testing Order - Min → Value → Max ===" ) ;
101+ var slider = new Slider ( ) ;
102+ slider . Minimum = 10 ;
103+ slider . Value = 50 ;
104+ slider . Maximum = 100 ;
105+
106+ bool passed = Math . Abs ( slider . Value - 50 ) < 0.01 ;
107+ Console . WriteLine ( $ "Result: Value={ slider . Value } (Expected: 50, Passed: { passed } )") ;
108+
109+ ValidationStatusLabel . Text = passed ? "✅ Min→Value→Max: PASSED" : $ "❌ Min→Value→Max: FAILED (Got { slider . Value } )";
110+ ValidationStatusLabel . TextColor = passed ? Colors . Green : Colors . Red ;
111+ }
112+
113+ private void OnTestMaxValueMin ( object sender , EventArgs e )
114+ {
115+ Console . WriteLine ( "=== SANDBOX: Testing Order - Max → Value → Min ===" ) ;
116+ var slider = new Slider ( ) ;
117+ slider . Maximum = 100 ;
118+ slider . Value = 50 ;
119+ slider . Minimum = 10 ;
120+
121+ bool passed = Math . Abs ( slider . Value - 50 ) < 0.01 ;
122+ Console . WriteLine ( $ "Result: Value={ slider . Value } (Expected: 50, Passed: { passed } )") ;
123+
124+ ValidationStatusLabel . Text = passed ? "✅ Max→Value→Min: PASSED" : $ "❌ Max→Value→Min: FAILED (Got { slider . Value } )";
125+ ValidationStatusLabel . TextColor = passed ? Colors . Green : Colors . Red ;
126+ }
127+
128+ private void OnShrinkRange ( object sender , EventArgs e )
129+ {
130+ Console . WriteLine ( "=== SANDBOX: Shrinking range to 0-10 ===" ) ;
131+ Console . WriteLine ( $ "Before: Min={ DynamicSlider . Minimum } , Max={ DynamicSlider . Maximum } , Value={ DynamicSlider . Value } ") ;
132+
133+ DynamicSlider . Minimum = 0 ;
134+ DynamicSlider . Maximum = 10 ;
135+
136+ Console . WriteLine ( $ "After: Min={ DynamicSlider . Minimum } , Max={ DynamicSlider . Maximum } , Value={ DynamicSlider . Value } ") ;
137+ Console . WriteLine ( "Value should be clamped to 10, but original value (50) should be remembered" ) ;
138+ }
139+
140+ private void OnExpandRange ( object sender , EventArgs e )
141+ {
142+ Console . WriteLine ( "=== SANDBOX: Expanding range back to 0-100 ===" ) ;
143+ Console . WriteLine ( $ "Before: Min={ DynamicSlider . Minimum } , Max={ DynamicSlider . Maximum } , Value={ DynamicSlider . Value } ") ;
144+
145+ DynamicSlider . Maximum = 100 ;
146+
147+ Console . WriteLine ( $ "After: Min={ DynamicSlider . Minimum } , Max={ DynamicSlider . Maximum } , Value={ DynamicSlider . Value } ") ;
148+
149+ bool passed = Math . Abs ( DynamicSlider . Value - 50 ) < 0.01 ;
150+ Console . WriteLine ( $ "Expected value to restore to 50: { passed } ") ;
151+
152+ ValidationStatusLabel . Text = passed ? "✅ Value restored to 50!" : $ "❌ Value NOT restored (Got { DynamicSlider . Value } )";
153+ ValidationStatusLabel . TextColor = passed ? Colors . Green : Colors . Red ;
154+ }
155+
156+ public new event PropertyChangedEventHandler ? PropertyChanged ;
157+
158+ protected new void OnPropertyChanged ( [ CallerMemberName ] string ? propertyName = null )
159+ {
160+ PropertyChanged ? . Invoke ( this , new PropertyChangedEventArgs ( propertyName ) ) ;
8161 }
9162}
0 commit comments