{"record":{"id":"b3b37d3469457da6","repo":"dotnet/wpf","slug":"capturemode-wispstylusdevice","errorCode":null,"errorMessage":"captureMode","messagePattern":"captureMode","errorType":"validation","errorClass":"InvalidEnumArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/Input/Stylus/Wisp/WispStylusDevice.cs","lineNumber":228,"sourceCode":"        {\n            get\n            {\n                return _captureMode;\n            }\n        }\n\n        /////////////////////////////////////////////////////////////////////\n        /// <summary>\n        ///     Captures the stylus to a particular element.\n        /// </summary>\n        internal override bool Capture(IInputElement element, CaptureMode captureMode)\n        {\n            int timeStamp = Environment.TickCount;\n            VerifyAccess();\n\n            if (!(captureMode == CaptureMode.None || captureMode == CaptureMode.Element || captureMode == CaptureMode.SubTree))\n            {\n                throw new System.ComponentModel.InvalidEnumArgumentException(\"captureMode\", (int)captureMode, typeof(CaptureMode));\n            }\n\n            if (element == null)\n            {\n                captureMode = CaptureMode.None;\n            }\n\n            if (captureMode == CaptureMode.None)\n            {\n                element = null;\n            }\n\n            // Validate that element is either a UIElement, a ContentElement or a UIElement3D.\n            DependencyObject doStylusCapture = element as DependencyObject;\n            if (doStylusCapture != null && !InputElement.IsValid(element))\n            {\n                throw new InvalidOperationException(SR.Format(SR.Invalid_IInputElement, doStylusCapture.GetType()));\n            }","sourceCodeStart":210,"sourceCodeEnd":246,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/Input/Stylus/Wisp/WispStylusDevice.cs#L210-L246","documentation":"WispStylusDevice.Capture (WispStylusDevice.cs:228) throws InvalidEnumArgumentException(\"captureMode\", ...) when the passed captureMode is not one of CaptureMode.None, CaptureMode.Element, or CaptureMode.SubTree. This is an argument validation guard on a public API accepting an enum.","triggerScenarios":"Calling StylusDevice.Capture(element, mode) with a cast or uninitialized value outside the defined CaptureMode range, e.g. (CaptureMode)99.","commonSituations":"Interop code passing raw ints as CaptureMode; deserializing mode values from config/persisted state; copies of CaptureMode enums that have drifted in versioning.","solutions":["Pass only CaptureMode.None, CaptureMode.Element, or CaptureMode.SubTree.","Validate/normalize any externally supplied mode value against the enum before calling Capture.","Fix casts of int literals to CaptureMode in interop layers."],"exampleFix":"// before\nstylusDevice.Capture(el, (CaptureMode)rawInt);\n// after\nvar mode = Enum.IsDefined(typeof(CaptureMode), rawInt) ? (CaptureMode)rawInt : CaptureMode.None;\nstylusDevice.Capture(el, mode);","handlingStrategy":"validation","validationCode":"if (captureMode != CaptureMode.None && captureMode != CaptureMode.Element && captureMode != CaptureMode.SubTree)\n    throw new ArgumentException(\"Invalid CaptureMode value\");","typeGuard":"static bool IsDefinedCaptureMode(CaptureMode m) => m == CaptureMode.None || m == CaptureMode.Element || m == CaptureMode.SubTree;","tryCatchPattern":"try { stylusDevice.Capture(el, captureMode); } catch (System.ComponentModel.InvalidEnumArgumentException) { /* fall back to CaptureMode.None */ }","preventionTips":["Never cast raw ints to CaptureMode without Enum.IsDefined validation","Persist enum names, not numeric values, in config","Keep interop layers strongly typed"],"tags":["wpf","stylus","enum","argument-validation"],"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-22T01:17:13.364Z"}