{"record":{"id":"95365fe094a02c17","repo":"dotnet/wpf","slug":"invalidenumargumentexception-focusnavigationdirection-int","errorCode":null,"errorMessage":"InvalidEnumArgumentException(\"focusNavigationDirection\", (int)focusNavigationDirection, typeof(FocusNavigationDirection))","messagePattern":"InvalidEnumArgumentException\\(\"focusNavigationDirection\", \\(int\\)focusNavigationDirection, typeof\\(FocusNavigationDirection\\)\\)","errorType":"exception","errorClass":"InvalidEnumArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/WindowsBase/System/Windows/TraversalRequest.cs","lineNumber":27,"sourceCode":"            if (focusNavigationDirection != FocusNavigationDirection.Next &&\n                 focusNavigationDirection != FocusNavigationDirection.Previous &&\n                 focusNavigationDirection != FocusNavigationDirection.First &&\n                 focusNavigationDirection != FocusNavigationDirection.Last &&\n                 focusNavigationDirection != FocusNavigationDirection.Left &&\n                 focusNavigationDirection != FocusNavigationDirection.Right &&\n                 focusNavigationDirection != FocusNavigationDirection.Up &&\n                 focusNavigationDirection != FocusNavigationDirection.Down)\n            {\n                throw new System.ComponentModel.InvalidEnumArgumentException(\"focusNavigationDirection\", (int)focusNavigationDirection, typeof(FocusNavigationDirection));\n            }\n\n            _focusNavigationDirection = focusNavigationDirection;","sourceCodeStart":null,"sourceCodeEnd":null,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/WindowsBase/System/Windows/TraversalRequest.cs#L27","documentation":"The TraversalRequest constructor validates that focusNavigationDirection is a defined member of the FocusNavigationDirection enum, throwing InvalidEnumArgumentException otherwise. This prevents invalid navigation directions from entering the focus traversal system. It is a fail-fast guard at the public constructor boundary.","triggerScenarios":"new TraversalRequest((FocusNavigationDirection)someInt) where the int is negative or beyond the last defined enum member (FocusNavigationDirection has values 0-6, so anything outside that range).","commonSituations":"Computing a navigation direction arithmetically from a key press or index; deserializing persisted UI state with a stale int; interop code passing unvalidated native values.","solutions":["Validate with Enum.IsDefined(typeof(FocusNavigationDirection), direction) before constructing TraversalRequest.","Use one of the named enum constants (Next, Previous, First, Last, Left, Right, Up, Down) instead of computed integers.","Clamp or normalize the computed direction into the valid range before constructing.","Catch InvalidEnumArgumentException and fall back to FocusNavigationDirection.Next."],"exampleFix":"// before\nvar request = new TraversalRequest((FocusNavigationDirection)offset); // offset arbitrary\n// after\nif (Enum.IsDefined(typeof(FocusNavigationDirection), offset))\n    var request = new TraversalRequest((FocusNavigationDirection)offset);\nelse\n    var request = new TraversalRequest(FocusNavigationDirection.Next);","handlingStrategy":"validation","validationCode":"bool ok = Enum.IsDefined(typeof(FocusNavigationDirection), direction);","typeGuard":"static bool IsValidFocusNavDirection(FocusNavigationDirection d) => Enum.IsDefined(typeof(FocusNavigationDirection), d);","tryCatchPattern":"try { var req = new TraversalRequest(direction); }\ncatch (InvalidEnumArgumentException) { var req = new TraversalRequest(FocusNavigationDirection.Next); }","preventionTips":["Use named enum constants, not computed ints.","Validate with Enum.IsDefined after any arithmetic on enum values.","Be careful casting persisted/native ints back to the enum."],"tags":["wpf","enum","focus-navigation"],"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"}