protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);

            if (nativeControl == null || Element == null)
            {
                return;
            }

            switch (e.PropertyName)
            {
            case "Renderer":
                Element?.SendValueChanged();
                break;

            case "SelectedSegment":
                if (Element.SelectedSegment == -1)
                {
                    // find checked segment and unselect it
                    var segment = (Windows.UI.Xaml.Controls.RadioButton)nativeControl.SegmentedControlGrid.Children
                                  .Where(x =>
                    {
                        var btn = (Windows.UI.Xaml.Controls.RadioButton)x;
                        return(btn.IsChecked == true);
                    })
                                  .FirstOrDefault();
                    segment.IsChecked = false;
                    return;
                }
                if (nativeControl.SegmentedControlGrid.Children
                    .Where(x =>
                {
                    var btn = (Windows.UI.Xaml.Controls.RadioButton)x;

                    int.TryParse(btn.Tag.ToString(), out var i);
                    return(i == Element.SelectedSegment);
                })
                    .FirstOrDefault() is Windows.UI.Xaml.Controls.RadioButton checkedButton)
                {
                    checkedButton.IsChecked = true;
                }
                Element?.SendValueChanged();
                break;

            case "TintColor":
                foreach (var segment in nativeControl.SegmentedControlGrid.Children)
                {
                    ((SegmentRadioButton)segment).TintColor = (SolidColorBrush)_colorConverter.Convert(Element.TintColor, null, null, "");
                }
                break;

            case "DisabledColor":
                foreach (var segment in nativeControl.SegmentedControlGrid.Children)
                {
                    ((SegmentRadioButton)segment).DisabledColor = (SolidColorBrush)_colorConverter.Convert(Element.DisabledColor, null, null, "");
                }
                break;

            case "Height":
                // Hack to fix IsEnabled at First Launch
                foreach (var uiElement in nativeControl.SegmentedControlGrid.Children)
                {
                    var segment = (SegmentRadioButton)uiElement;
                    SegmentRadioButton.Refresh(segment);
                }
                nativeControl.SegmentedControlGrid.BorderBrush = Element.IsEnabled ? (SolidColorBrush)_colorConverter.Convert(Element.TintColor, null, null, "") : (SolidColorBrush)_colorConverter.Convert(Element.DisabledColor, null, null, "");
                break;

            case "IsEnabled":
                foreach (var uiElement in nativeControl.SegmentedControlGrid.Children)
                {
                    var segment = (SegmentRadioButton)uiElement;
                    segment.IsEnabled = Element.IsEnabled;
                }
                nativeControl.SegmentedControlGrid.BorderBrush = Element.IsEnabled ? (SolidColorBrush)_colorConverter.Convert(Element.TintColor, null, null, "") : (SolidColorBrush)_colorConverter.Convert(Element.DisabledColor, null, null, "");
                break;

            case "SelectedTextColor":
                SetSelectedTextColor();
                break;
            }
        }
        protected override void OnElementChanged(ElementChangedEventArgs <Abstractions.SegmentedControl> e)
        {
            base.OnElementChanged(e);

            if (Control == null)
            {
                nativeControl = new SegmentedUserControl();

                var radioButtonGroupName = Guid.NewGuid().ToString();

                var grid = nativeControl.SegmentedControlGrid;
                grid.BorderBrush = (SolidColorBrush)_colorConverter.Convert(Element.TintColor, null, null, "");

                grid.ColumnDefinitions.Clear();
                grid.Children.Clear();

                for (var i = 0; i < Element.Children.Count; i++)
                {
                    var segmentButton = new SegmentRadioButton
                    {
                        GroupName           = radioButtonGroupName,
                        Style               = (Windows.UI.Xaml.Style)nativeControl.Resources["SegmentedRadioButtonStyle"],
                        Content             = Element.Children[i].Text,
                        Tag                 = i,
                        HorizontalAlignment = HorizontalAlignment.Stretch,
                        VerticalAlignment   = VerticalAlignment.Stretch,
                        BorderBrush         = (SolidColorBrush)_colorConverter.Convert(Element.TintColor, null, null, ""),
                        SelectedTextColor   = (SolidColorBrush)_colorConverter.Convert(Element.SelectedTextColor, null, null, ""),
                        TintColor           = (SolidColorBrush)_colorConverter.Convert(Element.TintColor, null, null, ""),
                        DisabledColor       = (SolidColorBrush)_colorConverter.Convert(Element.DisabledColor, null, null, ""),
                        BorderThickness     = i > 0 ? new Windows.UI.Xaml.Thickness(1, 0, 0, 0) : new Windows.UI.Xaml.Thickness(0, 0, 0, 0),
                        IsEnabled           = Element.IsEnabled
                    };

                    segmentButton.Checked += SegmentRadioButtonOnChecked;

                    if (i == Element.SelectedSegment)
                    {
                        segmentButton.IsChecked = true;
                    }

                    grid.ColumnDefinitions.Add(new Windows.UI.Xaml.Controls.ColumnDefinition
                    {
                        Width = new Windows.UI.Xaml.GridLength(1, Windows.UI.Xaml.GridUnitType.Star),
                    });

                    grid.Children.Add(segmentButton);

                    Windows.UI.Xaml.Controls.Grid.SetColumn(segmentButton, i);
                }

                SetNativeControl(nativeControl);
            }

            if (e.OldElement != null)
            {
                DisposeEventHandlers();
            }

            if (e.NewElement != null)
            {
            }
        }