Skip to content

Commit d597c0a

Browse files
corvinszKeboo
andauthored
Fix NumericUpDown Buttons not disabling (#3797)
* Update IsEnabled of the Plus-/Minus-Buttons in the NumericUpDownControl on initial loading of the control * Adding UI test --------- Co-authored-by: Kevin Bost <[email protected]>
1 parent 9289f6c commit d597c0a

File tree

2 files changed

+47
-4
lines changed

2 files changed

+47
-4
lines changed

src/MaterialDesignThemes.Wpf/UpDownBase.cs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,14 +121,23 @@ private static void OnNumericValueChanged(DependencyObject d, DependencyProperty
121121
textBox.Text = e.NewValue.ToString();
122122
}
123123

124-
if (upDownBase._increaseButton is { } increaseButton)
124+
upDownBase.UpdateDecreaseButtonEnabled();
125+
upDownBase.UpdateIncreaseButtonEnabled();
126+
}
127+
128+
private void UpdateIncreaseButtonEnabled()
129+
{
130+
if (_increaseButton is { } increaseButton)
125131
{
126-
increaseButton.IsEnabled = Compare(upDownBase.Value, upDownBase.Maximum) < 0;
132+
increaseButton.IsEnabled = Compare(Value, Maximum) < 0;
127133
}
134+
}
128135

129-
if (upDownBase._decreaseButton is { } decreaseButton)
136+
private void UpdateDecreaseButtonEnabled()
137+
{
138+
if (_decreaseButton is { } decreaseButton)
130139
{
131-
decreaseButton.IsEnabled = Compare(upDownBase.Value, upDownBase.Minimum) > 0;
140+
decreaseButton.IsEnabled = Compare(Value, Minimum) > 0;
132141
}
133142
}
134143

@@ -197,10 +206,16 @@ public override void OnApplyTemplate()
197206
base.OnApplyTemplate();
198207

199208
if (_increaseButton != null)
209+
{
200210
_increaseButton.Click += IncreaseButtonOnClick;
211+
UpdateIncreaseButtonEnabled();
212+
}
201213

202214
if (_decreaseButton != null)
215+
{
203216
_decreaseButton.Click += DecreaseButtonOnClick;
217+
UpdateDecreaseButtonEnabled();
218+
}
204219

205220
if (_textBoxField != null)
206221
{

tests/MaterialDesignThemes.UITests/WPF/UpDownControls/NumericUpDownTests.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,4 +187,32 @@ public async Task NumericUpDown_ValueSetGreaterThanMaximum_CoercesToMaximum()
187187

188188
recorder.Success();
189189
}
190+
191+
[Theory]
192+
[InlineData(1, false, true)]
193+
[InlineData(5, true, true)]
194+
[InlineData(10, true, false)]
195+
[Description("Issue 3796")]
196+
public async Task NumericUpDown_WhenValueEqualsMinimum_DisableButtons(int value,
197+
bool decreaseEnabled, bool increaseEnabled)
198+
{
199+
await using var recorder = new TestRecorder(App);
200+
//Arrange
201+
var numericUpDown = await LoadXaml<NumericUpDown>($"""
202+
<materialDesign:NumericUpDown Value="{value}" Maximum="10" Minimum="1" />
203+
""");
204+
var increaseButton = await numericUpDown.GetElement<RepeatButton>("PART_IncreaseButton");
205+
var decreaseButton = await numericUpDown.GetElement<RepeatButton>("PART_DecreaseButton");
206+
207+
//Act
208+
209+
bool increaseButtonEnabled = await increaseButton.GetIsEnabled();
210+
bool decreaseButtonEnabled = await decreaseButton.GetIsEnabled();
211+
212+
//Assert
213+
Assert.Equal(increaseEnabled, increaseButtonEnabled);
214+
Assert.Equal(decreaseEnabled, decreaseButtonEnabled);
215+
216+
recorder.Success();
217+
}
190218
}

0 commit comments

Comments
 (0)