diff --git a/src/settings-ui/Settings.UI/ViewModels/PluginAdditionalOptionViewModel.cs b/src/settings-ui/Settings.UI/ViewModels/PluginAdditionalOptionViewModel.cs index d1c22ad0b5d..02b83228c7e 100644 --- a/src/settings-ui/Settings.UI/ViewModels/PluginAdditionalOptionViewModel.cs +++ b/src/settings-ui/Settings.UI/ViewModels/PluginAdditionalOptionViewModel.cs @@ -105,7 +105,15 @@ public double NumberValue get => _additionalOption.NumberValue; set { - if (value != _additionalOption.NumberValue) + if (double.IsNaN(value)) + { + // If the user clears the NumberBox and presses enter or moves focus away then `value` converted to double results in `double.NaN`. This crashes the settings app. (https://github.com/microsoft/PowerToys/issues/32738#issuecomment-2105983967) + // To prevent the crash and provide a nice user experience we reset the NumberBox to the last valid value. This happens by sending a `NotifyPropertyChanged()` command and let the NumberBox reload its value. + // (Yes we could use 0, but this needs additional code for checking 0 against min and max. + // And yes we could also use the min value of the NumberBox, but this is not user friendly as the minimum value of NumberBox can be `double.MinValue`.) + NotifyPropertyChanged(); + } + else if (value != _additionalOption.NumberValue) { _additionalOption.NumberValue = value; NotifyPropertyChanged();