summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.WP8/StepperRenderer.cs
blob: a0193c3271c4fb7a5b7473e7efdb6f0f383566f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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;

		IElementController ElementController => Element as IElementController;

		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)
		{
			ElementController.SetValueFromRenderer(Stepper.ValueProperty, Math.Max(Element.Minimum, Element.Value - Element.Increment));
		}

		void UpButtonOnClick(object sender, RoutedEventArgs routedEventArgs)
		{
			ElementController.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;
		}
	}
}