dotnet/wpf · error · InvalidEnumArgumentException
captureMode
Error message
captureMode
What it means
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.
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.
Example fix
// before stylusDevice.Capture(el, (CaptureMode)rawInt); // after var mode = Enum.IsDefined(typeof(CaptureMode), rawInt) ? (CaptureMode)rawInt : CaptureMode.None; stylusDevice.Capture(el, mode);
Defensive patterns
Strategy: validation
Validate before calling
if (captureMode != CaptureMode.None && captureMode != CaptureMode.Element && captureMode != CaptureMode.SubTree)
throw new ArgumentException("Invalid CaptureMode value"); Type guard
static bool IsDefinedCaptureMode(CaptureMode m) => m == CaptureMode.None || m == CaptureMode.Element || m == CaptureMode.SubTree;
Try / catch
try { stylusDevice.Capture(el, captureMode); } catch (System.ComponentModel.InvalidEnumArgumentException) { /* fall back to CaptureMode.None */ } Prevention
- Never cast raw ints to CaptureMode without Enum.IsDefined validation
- Persist enum names, not numeric values, in config
- Keep interop layers strongly typed
When it happens
Trigger: Calling StylusDevice.Capture(element, mode) with a cast or uninitialized value outside the defined CaptureMode range, e.g. (CaptureMode)99.
Common situations: Interop code passing raw ints as CaptureMode; deserializing mode values from config/persisted state; copies of CaptureMode enums that have drifted in versioning.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- ArgumentOutOfRangeException(authentication)
- ArgumentOutOfRangeException(userActivationMode)
- autoComplete
- Enum_Invalid
- InvalidEnumArgumentException("action", (int)action…
AI-assisted analysis of dotnet/wpf@81131a70a4 (2026-09-14).
Data as JSON: /api/errors/b3b37d3469457da6.
Report an issue: GitHub.
Appendix: source
Thrown at src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/Input/Stylus/Wisp/WispStylusDevice.cs:228
{
get
{
return _captureMode;
}
}
/////////////////////////////////////////////////////////////////////
/// <summary>
/// Captures the stylus to a particular element.
/// </summary>
internal override bool Capture(IInputElement element, CaptureMode captureMode)
{
int timeStamp = Environment.TickCount;
VerifyAccess();
if (!(captureMode == CaptureMode.None || captureMode == CaptureMode.Element || captureMode == CaptureMode.SubTree))
{
throw new System.ComponentModel.InvalidEnumArgumentException("captureMode", (int)captureMode, typeof(CaptureMode));
}
if (element == null)
{
captureMode = CaptureMode.None;
}
if (captureMode == CaptureMode.None)
{
element = null;
}
// Validate that element is either a UIElement, a ContentElement or a UIElement3D.
DependencyObject doStylusCapture = element as DependencyObject;
if (doStylusCapture != null && !InputElement.IsValid(element))
{
throw new InvalidOperationException(SR.Format(SR.Invalid_IInputElement, doStylusCapture.GetType()));
}View on GitHub (pinned to 81131a70a4)