{"record":{"id":"7ede984a77163c32","repo":"dotnet/wpf","slug":"argumentoutofrangeexception-routedevent","errorCode":null,"errorMessage":"ArgumentOutOfRangeException(routedEvent)","messagePattern":"ArgumentOutOfRangeException\\(routedEvent\\)","errorType":"exception","errorClass":"ArgumentOutOfRangeException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/DataObjectEventArgs.cs","lineNumber":47,"sourceCode":"        /// <summary>\n        /// Creates a DataObjectCopyEvent.\n        /// This object created by editors executing a Copy/Paste\n        /// and Drag/Drop comands.\n        /// </summary>\n        /// <param name=\"routedEvent\">\n        /// An event id. One of: CopyingEvent or PastingEvent\n        /// </param>\n        /// <param name=\"isDragDrop\">\n        /// A flag indicating if this operation is part of drag/drop.\n        /// Copying event fired on drag start, Pasting - on drop.\n        /// Cancelling the command stops drag/drop process in\n        /// an appropriate moment.\n        /// </param>\n        internal DataObjectEventArgs(RoutedEvent routedEvent, bool isDragDrop) : base()\n        {\n            if (routedEvent != DataObject.CopyingEvent && routedEvent != DataObject.PastingEvent && routedEvent != DataObject.SettingDataEvent)\n            {\n                throw new ArgumentOutOfRangeException(nameof(routedEvent));\n            }\n\n            RoutedEvent = routedEvent;\n            \n            _isDragDrop = isDragDrop;\n            _commandCancelled = false;\n        }\n\n        #endregion Constructors\n\n        //------------------------------------------------------\n        //\n        //  Public Properties\n        //\n        //------------------------------------------------------\n\n        #region Public Properties\n","sourceCodeStart":29,"sourceCodeEnd":65,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/DataObjectEventArgs.cs#L29-L65","documentation":"DataObjectEventArgs' internal constructor only accepts the routed events that make sense for data-object operations: DataObject.CopyingEvent, DataObject.PastingEvent, and DataObject.SettingDataEvent. Passing any other RoutedEvent throws ArgumentOutOfRangeException(\"routedEvent\").","triggerScenarios":"Raising or subclassing DataObjectEventArgs with a foreign RoutedEvent, e.g. raising the event with EventManager-defined or custom routed event IDs, or wiring a DataObjectEventArgs-derived class to a custom routed event.","commonSituations":"Custom copy/paste pipelines reusing DataObjectEventArgs for their own routed events; reflection-based event raising that passes the wrong RoutedEvent field.","solutions":["Only raise DataObject.CopyingEvent, DataObject.PastingEvent, or DataObject.SettingDataEvent with DataObjectEventArgs","Derive from RoutedEventArgs instead of DataObjectEventArgs for custom events","Verify the RoutedEvent static field passed to RaiseEvent belongs to DataObject"],"exampleFix":"// before\nRaiseEvent(new DataObjectEventArgs(MyCustomEvent, isDragDrop: false));\n// after\nRaiseEvent(new RoutedEventArgs(MyCustomEvent)); // custom events use RoutedEventArgs\n// or: RaiseEvent(new DataObjectEventArgs(DataObject.CopyingEvent, false));","handlingStrategy":"validation","validationCode":"bool allowed = routedEvent == DataObject.CopyingEvent || routedEvent == DataObject.PastingEvent || routedEvent == DataObject.SettingDataEvent;","typeGuard":"static bool IsDataObjectEvent(RoutedEvent e) =>\n    e == System.Windows.DataObject.CopyingEvent ||\n    e == System.Windows.DataObject.PastingEvent ||\n    e == System.Windows.DataObject.SettingDataEvent;","tryCatchPattern":"try\n{\n    RaiseEvent(new DataObjectEventArgs(routedEvent, false));\n}\ncatch (ArgumentOutOfRangeException ex) when (ex.ParamName == \"routedEvent\")\n{\n    // wrong routed event; use RoutedEventArgs for custom events\n}","preventionTips":["Only use DataObjectEventArgs with the three DataObject.* routed events","Derive from RoutedEventArgs for custom clipboard-like events","Reference the exact static RoutedEvent fields from DataObject"],"tags":["wpf","clipboard","routed-events","argument-out-of-range"],"backgroundTag":"invalid-argument-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"}