{"id":21649987,"url":"https://github.com/bysuspect/xamarin.forms-numericupdown","last_synced_at":"2025-03-20T03:20:24.030Z","repository":{"id":47794383,"uuid":"515553507","full_name":"BySuspect/Xamarin.Forms-NumericUpDown","owner":"BySuspect","description":"Xamarin Forms NumericUpDown","archived":false,"fork":false,"pushed_at":"2023-04-16T16:03:19.000Z","size":663,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-25T05:25:37.827Z","etag":null,"topics":["numericupdown","xamarin","xamarin-android","xamarin-custom-renderer","xamarin-forms","xamarin-ios"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BySuspect.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-07-19T11:20:34.000Z","updated_at":"2023-01-13T15:51:18.000Z","dependencies_parsed_at":"2024-11-25T07:37:24.422Z","dependency_job_id":"10ab4cbc-d7f8-4cbd-8aa0-6de47607fa65","html_url":"https://github.com/BySuspect/Xamarin.Forms-NumericUpDown","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BySuspect%2FXamarin.Forms-NumericUpDown","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BySuspect%2FXamarin.Forms-NumericUpDown/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BySuspect%2FXamarin.Forms-NumericUpDown/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BySuspect%2FXamarin.Forms-NumericUpDown/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BySuspect","download_url":"https://codeload.github.com/BySuspect/Xamarin.Forms-NumericUpDown/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244542122,"owners_count":20469273,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["numericupdown","xamarin","xamarin-android","xamarin-custom-renderer","xamarin-forms","xamarin-ios"],"created_at":"2024-11-25T07:37:10.182Z","updated_at":"2025-03-20T03:20:23.990Z","avatar_url":"https://github.com/BySuspect.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Custom NumericUpDown\n\n![Preview](https://cdn.discordapp.com/attachments/750464609303134339/998915169415598100/Screenshot_1.png?size=4096)\n\n## Getting Started\n\n\n### First Create ```NumericUpDown.cs``` on your ```Main``` project.\nWrite the following code.\n\n```\n\n    public class NumericUpDown : Frame\n    {\n        Grid _grid;\n        CustomNumericUpDownEntry _entry;\n        StackLayout _stackLayout;\n        Button _btnup, _btndown;\n\n        double _value = 0,\n            _maxValue = 60,\n            _minValue = 0,\n            _increaseValue = 1;\n\n        int _btnCornerRadius = 15,\n            _btnBorderWith = 1,\n            _btnFontSize = 20,\n            _entryFontSize = 20;\n\n        Color _btnUpBackColor = Color.White,\n            _btnDownBackColor = Color.White,\n            _btnUpBorderColor = Color.Transparent,\n            _btnDownBorderColor = Color.Transparent,\n            _entryTextColor = Color.Black,\n            _btnUpTextColor = Color.Black,\n            _btnDownTextColor = Color.Black;\n        public NumericUpDown() : base()\n        {\n            BindingContext = this;\n            _grid = new Grid();\n            _entry = new CustomNumericUpDownEntry();\n            _stackLayout = new StackLayout();\n            _btnup = new Button();\n            _btndown = new Button();\n\n            #region Entry Settings\n            _entry.Margin = new Thickness(15, 0, 0, 0);\n            _entry.TextColor = _entryTextColor;\n            _entry.FontSize = _entryFontSize;\n            _entry.SetBinding(Entry.TextProperty, \"Value\");\n            _entry.Keyboard = Keyboard.Numeric;\n            _entry.TextChanged += (sender, args) =\u003e\n            {\n                OnTextChanged(args);\n            };\n            _entry.Unfocused += entry_unfocused;\n            #endregion\n\n            #region btnup settings\n            _btnup.FontSize = _btnFontSize;\n            _btnup.FontAttributes = FontAttributes.Bold;\n            _btnup.TextColor = _btnUpTextColor;\n            _btnup.VerticalOptions = LayoutOptions.Center;\n            _btnup.CornerRadius = _btnCornerRadius;\n            _btnup.BorderColor = _btnUpBorderColor;\n            _btnup.BorderWidth = _btnBorderWith;\n            _btnup.BackgroundColor = _btnUpBackColor;\n            _btnup.Text = \"+\";\n            _btnup.Clicked += (e, args) =\u003e\n            {\n                Unfocus();\n                if (_value \u003c _maxValue)\n                {\n                    _btndown.IsEnabled = true;\n                    _value = Convert.ToDouble(_entry.Text) + _increaseValue;\n                    _entry.Text = _value.ToString();\n                    if (_value == _maxValue) _btnup.IsEnabled = false;\n                }\n                else\n                {\n                    _value = maxValue;\n                    _entry.Text = _value.ToString();\n                    _btnup.IsEnabled = false;\n                }\n            };\n            #endregion\n\n            #region btndown settings\n            _btndown.FontSize = _btnFontSize;\n            _btndown.FontAttributes = FontAttributes.Bold;\n            _btndown.TextColor = _btnDownTextColor;\n            _btndown.VerticalOptions = LayoutOptions.Center;\n            _btndown.BorderColor = _btnDownBorderColor;\n            _btndown.BorderWidth = _btnBorderWith;\n            _btndown.CornerRadius = _btnCornerRadius;\n            _btndown.BackgroundColor = _btnDownBackColor;\n            _btndown.Text = \"-\";\n            _btndown.Clicked += (e, args) =\u003e\n            {\n                Unfocus();\n                if (_value \u003e _minValue)\n                {\n                    _btnup.IsEnabled = true;\n                    _value = Convert.ToDouble(_entry.Text) - _increaseValue;\n                    _entry.Text = _value.ToString();\n                    if (_value == _minValue) _btndown.IsEnabled = false;\n                }\n                else\n                {\n                    _value = _minValue;\n                    _entry.Text = _value.ToString();\n                    _btndown.IsEnabled = false;\n                }\n            };\n            #endregion\n\n            #region stacklayout settings\n            _stackLayout.Orientation = StackOrientation.Horizontal;\n            _stackLayout.HorizontalOptions = LayoutOptions.EndAndExpand;\n            _stackLayout.Children.Add(_btndown);\n            _stackLayout.Children.Add(_btnup);\n            #endregion\n\n            #region grid settings\n            _grid.Margin = new Thickness(-10);\n            _grid.Children.Add(_entry);\n            _grid.Children.Add(_stackLayout);\n            #endregion\n\n            Content = _grid;\n            this.CornerRadius = 15;\n        }\n\n        public double Increment\n        {\n            get\n            {\n                return _increaseValue;\n            }\n            set\n            {\n                _increaseValue = value;\n            }\n        }\n        public double maxValue\n        {\n            get\n            {\n                return _maxValue;\n            }\n            set\n            {\n                _maxValue = value;\n            }\n        }\n        public double minValue\n        {\n            get\n            {\n                return _minValue;\n            }\n            set\n            {\n                _minValue = value;\n                if (Value \u003c= minValue)\n                {\n                    Value = _minValue;\n                    _value = _minValue;\n                    _entry.Text = _value.ToString();\n                    _btndown.IsEnabled = false;\n                    _btnup.IsEnabled = true;\n                }\n            }\n        }\n        public double Value\n        {\n            get\n            {\n                return _value;\n            }\n            set\n            {\n                _entry.Text = value.ToString();\n                _value = value;\n            }\n        }\n        public Color UpButtonBackgroundColor\n        {\n            get\n            {\n                return _btnUpBackColor;\n            }\n            set\n            {\n                _btnup.BackgroundColor = value;\n                _btnUpBackColor = value;\n            }\n        }\n        public Color DownButtonBackgroundColor\n        {\n            get\n            {\n                return _btnDownBackColor;\n            }\n            set\n            {\n                _btndown.BackgroundColor = value;\n                _btnDownBackColor = value;\n            }\n        }\n        public Color UpButtonBorderColor\n        {\n            get\n            {\n                return _btnUpBorderColor;\n            }\n            set\n            {\n                _btnup.BorderColor = value;\n                _btnUpBorderColor = value;\n            }\n        }\n        public Color DownButtonBorderColor\n        {\n            get\n            {\n                return _btnDownBorderColor;\n            }\n            set\n            {\n                _btndown.BorderColor = value;\n                _btnDownBorderColor = value;\n            }\n        }\n        public Color TextColor\n        {\n            get\n            {\n                return _entryTextColor;\n            }\n            set\n            {\n                _entry.TextColor = value;\n                _entryTextColor = value;\n            }\n        }\n        public Color ButtonUpTextColor\n        {\n            get\n            {\n                return _btnUpTextColor;\n            }\n            set\n            {\n                _btnup.TextColor = value;\n                _btnUpTextColor = value;\n            }\n        }\n        public Color ButtonDownTextColor\n        {\n            get\n            {\n                return _btnDownTextColor;\n            }\n            set\n            {\n                _btndown.TextColor = value;\n                _btnDownTextColor = value;\n            }\n        }\n        public int TextFontSize\n        {\n            get\n            {\n                return _entryFontSize;\n            }\n            set\n            {\n                _entry.FontSize = value;\n                _entry.FontSize = value;\n                _entryFontSize = value;\n            }\n        }\n        public int ButtonFontSize\n        {\n            get\n            {\n                return _btnFontSize;\n            }\n            set\n            {\n                _btnup.FontSize = value;\n                _btndown.FontSize = value;\n                _btnFontSize = value;\n            }\n        }\n        public int ButtonBorderWith\n        {\n            get\n            {\n                return _btnBorderWith;\n            }\n            set\n            {\n                _btnup.BorderWidth = value;\n                _btndown.BorderWidth = value;\n                _btnBorderWith = value;\n            }\n        }\n        public int ButtonCornerRadius\n        {\n            get\n            {\n                return _btnCornerRadius;\n            }\n            set\n            {\n                _btnup.CornerRadius = value;\n                _btndown.CornerRadius = value;\n                _btnCornerRadius = value;\n            }\n        }\n        public event EventHandler\u003cTextChangedEventArgs\u003e TextChanged;\n        protected virtual void OnTextChanged(TextChangedEventArgs e)\n        {\n            EventHandler\u003cTextChangedEventArgs\u003e handler = TextChanged;\n            handler?.Invoke(this, e);\n        }\n        private void entry_unfocused(object sender, FocusEventArgs e)\n        {\n            if (Convert.ToDouble(_entry.Text) \u003e= maxValue)\n            {\n                _value = maxValue;\n                _entry.Text = _value.ToString();\n                _btnup.IsEnabled = false;\n                _btndown.IsEnabled = true;\n            }\n            else if (Convert.ToDouble(_entry.Text) \u003c= minValue)\n            {\n                _value = minValue;\n                _entry.Text = _value.ToString();\n                _btndown.IsEnabled = false;\n                _btnup.IsEnabled = true;\n            }\n        }\n        public new void Unfocus()\n        {\n            _entry.Unfocus();\n        }\n    }\n    public class CustomNumericUpDownEntry : Entry\n    {\n\n    }\n```\n\n### Second Create ```CustomNumericEntryRenderer.cs``` on ```Android``` project.\nWrite the following code.\n```\n[assembly: ExportRenderer(typeof(CustomNumericUpDownEntry), typeof(CustomNumericEntryRenderer))]\nnamespace [YOUR-PROJECT-NAME].Droid\n{\n    public class CustomNumericEntryRenderer : EntryRenderer\n    {\n        public CustomNumericEntryRenderer(Context context) : base(context)\n        {\n            AutoPackage = false;\n        }\n        protected override void OnElementChanged(ElementChangedEventArgs\u003cEntry\u003e e)\n        {\n            base.OnElementChanged(e);\n            if (Control != null)\n            {\n                Control.Background = new ColorDrawable(Android.Graphics.Color.Transparent);\n            }\n        }\n    }\n}\n```\n\n### Third Create ```CustomNumericEntryRenderer.cs``` on ```IOS``` project.\nWrite the following code.\n```\n[assembly: ExportRenderer(typeof(CustomNumericUpDownEntry), typeof(CustomNumericEntryRenderer))]\nnamespace [YOUR-PROJECT-NAME].iOS\n{\n    public class CustomNumericEntryRenderer : EntryRenderer\n    {\n        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)\n        {\n            base.OnElementPropertyChanged(sender, e);\n\n            Control.Layer.BorderWidth = 0;\n            Control.BorderStyle = UITextBorderStyle.None;\n        }\n    }\n}\n```\n### Using\n```Xaml```\n```\nxmlns:custom=\"clr-namespace:[YOUR-PROJECT-NAME]\"\n\n\u003ccustom:NumericUpDown\n   x:Name=\"numeric\"\n   Margin=\"15,0\"\n   BackgroundColor=\"#53FF7A7A\"\n   BorderColor=\"Red\"\n   ButtonCornerRadius=\"15\"\n   CornerRadius=\"15\"\n   DownButtonBackgroundColor=\"Red\"\n   UpButtonBackgroundColor=\"Green\" /\u003e\n```\n\n ### All files you need for add your project\n\n![Files](https://cdn.discordapp.com/attachments/750464609303134339/998913657318674533/Screenshot_1.png?size=4096)\n\n                \n### Properties\n\n * Value Ddefault = 0\n * MaxValue default = 60 \n * MinValue default = 0\n * UpButtonBackgroundColor default = White\n * DownButtonBackgroundColor default = White\n * UpButtonBorderColor default = transparent\n * DownButtonBorderColor default = transparent\n * TextColor default = Black\n * ButtonUpTextColor default = Black\n * ButtonDownTextColor default = Black\n * TextFontSize default = 20\n * ButtonFontSize default = 20\n * ButtonBorderWith default = 1\n * ButtonCornerRadius default = 15\n * Increment default = 1\n * TextChanged Event\n * And classic Frame properties\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbysuspect%2Fxamarin.forms-numericupdown","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbysuspect%2Fxamarin.forms-numericupdown","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbysuspect%2Fxamarin.forms-numericupdown/lists"}