diff --git a/src/MaterialDesignThemes.Wpf/UpDownBase.cs b/src/MaterialDesignThemes.Wpf/UpDownBase.cs index 23f2829599..e3ecb89407 100644 --- a/src/MaterialDesignThemes.Wpf/UpDownBase.cs +++ b/src/MaterialDesignThemes.Wpf/UpDownBase.cs @@ -121,14 +121,23 @@ private static void OnNumericValueChanged(DependencyObject d, DependencyProperty textBox.Text = e.NewValue.ToString(); } - if (upDownBase._increaseButton is { } increaseButton) + upDownBase.UpdateDecreaseButtonEnabled(); + upDownBase.UpdateIncreaseButtonEnabled(); + } + + private void UpdateIncreaseButtonEnabled() + { + if (_increaseButton is { } increaseButton) { - increaseButton.IsEnabled = Compare(upDownBase.Value, upDownBase.Maximum) < 0; + increaseButton.IsEnabled = Compare(Value, Maximum) < 0; } + } - if (upDownBase._decreaseButton is { } decreaseButton) + private void UpdateDecreaseButtonEnabled() + { + if (_decreaseButton is { } decreaseButton) { - decreaseButton.IsEnabled = Compare(upDownBase.Value, upDownBase.Minimum) > 0; + decreaseButton.IsEnabled = Compare(Value, Minimum) > 0; } } @@ -197,10 +206,16 @@ public override void OnApplyTemplate() base.OnApplyTemplate(); if (_increaseButton != null) + { _increaseButton.Click += IncreaseButtonOnClick; + UpdateIncreaseButtonEnabled(); + } if (_decreaseButton != null) + { _decreaseButton.Click += DecreaseButtonOnClick; + UpdateDecreaseButtonEnabled(); + } if (_textBoxField != null) { diff --git a/tests/MaterialDesignThemes.UITests/WPF/UpDownControls/NumericUpDownTests.cs b/tests/MaterialDesignThemes.UITests/WPF/UpDownControls/NumericUpDownTests.cs index 0ae462ed65..b9ddf032f3 100644 --- a/tests/MaterialDesignThemes.UITests/WPF/UpDownControls/NumericUpDownTests.cs +++ b/tests/MaterialDesignThemes.UITests/WPF/UpDownControls/NumericUpDownTests.cs @@ -187,4 +187,32 @@ public async Task NumericUpDown_ValueSetGreaterThanMaximum_CoercesToMaximum() recorder.Success(); } + + [Theory] + [InlineData(1, false, true)] + [InlineData(5, true, true)] + [InlineData(10, true, false)] + [Description("Issue 3796")] + public async Task NumericUpDown_WhenValueEqualsMinimum_DisableButtons(int value, + bool decreaseEnabled, bool increaseEnabled) + { + await using var recorder = new TestRecorder(App); + //Arrange + var numericUpDown = await LoadXaml($""" + + """); + var increaseButton = await numericUpDown.GetElement("PART_IncreaseButton"); + var decreaseButton = await numericUpDown.GetElement("PART_DecreaseButton"); + + //Act + + bool increaseButtonEnabled = await increaseButton.GetIsEnabled(); + bool decreaseButtonEnabled = await decreaseButton.GetIsEnabled(); + + //Assert + Assert.Equal(increaseEnabled, increaseButtonEnabled); + Assert.Equal(decreaseEnabled, decreaseButtonEnabled); + + recorder.Success(); + } }