{"record":{"id":"ddc0a47be2ed60d7","repo":"dotnet/wpf","slug":"invalidenumargumentexception-value-int-value-typeof-ddc0a4","errorCode":null,"errorMessage":"InvalidEnumArgumentException(\"value\", (int)value, typeof(ModifierKeys))","messagePattern":"InvalidEnumArgumentException\\(\"value\", \\(int\\)value, typeof\\(ModifierKeys\\)\\)","errorType":"exception","errorClass":"InvalidEnumArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/Input/Command/MouseGesture.cs","lineNumber":110,"sourceCode":"                    _mouseAction = (MouseAction)value;\n                    OnPropertyChanged(nameof(MouseAction));\n                }\n            }\n        }\n\n        /// <summary>\n        /// Modifiers \n        /// </summary>\n        public ModifierKeys Modifiers\n        {\n            get \n            { \n                return _modifiers; \n            }\n            set \n            {\n                if (!ModifierKeysConverter.IsDefinedModifierKeys((ModifierKeys)value))\n                    throw new InvalidEnumArgumentException(\"value\", (int)value, typeof(ModifierKeys));\n\n                if (_modifiers != value)\n                {\n                    _modifiers = (ModifierKeys)value;\n                    OnPropertyChanged(nameof(Modifiers));\n                }\n            }\n        }\n\n        /// <summary>\n        ///     Compares InputEventArgs with current Input\n        /// </summary>\n        /// <param name=\"targetElement\">the element to receive the command</param>\n        /// <param name=\"inputEventArgs\">inputEventArgs to compare to</param>\n        /// <returns>True - if matches, false otherwise.\n        /// </returns>\n        public override bool Matches(object targetElement, InputEventArgs inputEventArgs)\n        {","sourceCodeStart":92,"sourceCodeEnd":128,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/Input/Command/MouseGesture.cs#L92-L128","documentation":"The MouseGesture.Modifiers property setter validates the assigned value via ModifierKeysConverter.IsDefinedModifierKeys; an undefined ModifierKeys value throws InvalidEnumArgumentException naming 'value'.","triggerScenarios":"Assigning gesture.Modifiers = (ModifierKeys)128 from raw int data or flag arithmetic that produced undefined bit combinations.","commonSituations":"Binding layers or shortcut-customization UIs writing computed integer flags, or cross-platform code mapping foreign modifier bits into ModifierKeys.","solutions":["Assign only valid ModifierKeys members or combinations of Alt/Control/Shift/Windows.","Validate with ModifierKeysConverter.IsDefinedModifierKeys((ModifierKeys)value) before assignment.","Mask the incoming value to the defined modifier bits and reject unknown bits explicitly."],"exampleFix":"// before\ngesture.Modifiers = (ModifierKeys)incomingFlags;\n// after\nvar mods = (ModifierKeys)incomingFlags;\nif (ModifierKeysConverter.IsDefinedModifierKeys(mods))\n    gesture.Modifiers = mods;","handlingStrategy":"validation","validationCode":"var mods = (ModifierKeys)value;\nif (ModifierKeysConverter.IsDefinedModifierKeys(mods)) gesture.Modifiers = mods;","typeGuard":"static bool CanAssignModifiers(ModifierKeys m) => ModifierKeysConverter.IsDefinedModifierKeys(m);","tryCatchPattern":"try { gesture.Modifiers = mods; } catch (InvalidEnumArgumentException ex) { /* reset to ModifierKeys.None */ }","preventionTips":["Use ModifierKeysConverter.IsDefinedModifierKeys as the canonical check","Avoid storing modifiers as free-form ints","Constrain shortcut UIs to valid modifier combinations"],"tags":["wpf","enum","modifier-keys"],"backgroundTag":"invalid-enum-value","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-21T21:30:21.729Z"}