diff options
Diffstat (limited to 'Xamarin.Forms.Platform.WP8/StepperRenderer.cs')
-rw-r--r-- | Xamarin.Forms.Platform.WP8/StepperRenderer.cs | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.WP8/StepperRenderer.cs b/Xamarin.Forms.Platform.WP8/StepperRenderer.cs new file mode 100644 index 00000000..b459305f --- /dev/null +++ b/Xamarin.Forms.Platform.WP8/StepperRenderer.cs @@ -0,0 +1,68 @@ +using System; +using System.ComponentModel; +using System.Windows; +using System.Windows.Controls; +using WButton = System.Windows.Controls.Button; + +namespace Xamarin.Forms.Platform.WinPhone +{ + public class StepperRenderer : ViewRenderer<Stepper, Border> + { + readonly StackPanel _panel = new StackPanel(); + WButton _downButton; + WButton _upButton; + + protected override void OnElementChanged(ElementChangedEventArgs<Stepper> e) + { + base.OnElementChanged(e); + + var border = new Border(); + border.Child = _panel; + _panel.HorizontalAlignment = HorizontalAlignment.Right; + _panel.Orientation = Orientation.Horizontal; + + _upButton = new WButton { Content = "+", Width = 100 }; + _downButton = new WButton { Content = "-", Width = 100 }; + + _panel.Children.Add(_downButton); + _panel.Children.Add(_upButton); + + SetNativeControl(border); + + _upButton.Click += UpButtonOnClick; + _downButton.Click += DownButtonOnClick; + + UpdateButtons(); + } + + protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) + { + base.OnElementPropertyChanged(sender, e); + + switch (e.PropertyName) + { + case "Minimum": + case "Maximum": + case "Value": + UpdateButtons(); + break; + } + } + + void DownButtonOnClick(object sender, RoutedEventArgs routedEventArgs) + { + ((IElementController)Element).SetValueFromRenderer(Stepper.ValueProperty, Math.Max(Element.Minimum, Element.Value - Element.Increment)); + } + + void UpButtonOnClick(object sender, RoutedEventArgs routedEventArgs) + { + ((IElementController)Element).SetValueFromRenderer(Stepper.ValueProperty, Math.Min(Element.Maximum, Element.Value + Element.Increment)); + } + + void UpdateButtons() + { + _upButton.IsEnabled = Element.Value < Element.Maximum; + _downButton.IsEnabled = Element.Value > Element.Minimum; + } + } +}
\ No newline at end of file |