{"record":{"id":"ac95f7b93b99ac99","repo":"dotnet/wpf","slug":"sr-requestnavigateeventmusthaveroutedevent","errorCode":null,"errorMessage":"SR.RequestNavigateEventMustHaveRoutedEvent","messagePattern":"SR\\.RequestNavigateEventMustHaveRoutedEvent","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Navigation/RequestNavigateEventArgs.cs","lineNumber":68,"sourceCode":"        /// <summary>\n        /// Target window or frame to perform navigation\n        /// </summary>\n        /// <ExternalAPI Inherit=\"true\"/>\n        public string Target\n        {\n            get{return _target;}\n        }\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"genericHandler\"></param>\n        /// <param name=\"genericTarget\"></param>\n        protected override void InvokeEventHandler(Delegate genericHandler, object genericTarget)\n        {\n            if (RoutedEvent == null)\n            {\n                throw new InvalidOperationException(SR.RequestNavigateEventMustHaveRoutedEvent);\n            }\n\n            RequestNavigateEventHandler handler = (RequestNavigateEventHandler)genericHandler;\n\n            handler(genericTarget, this);\n        }            \n    }\n\n    /// <summary>\n    /// Delegate that handles RequestNavigate event.\n    /// </summary>\n    /// <ExternalAPI Inherit=\"true\"/>\n    public delegate void RequestNavigateEventHandler(object sender, RequestNavigateEventArgs e);\n}\n","sourceCodeStart":50,"sourceCodeEnd":83,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Navigation/RequestNavigateEventArgs.cs#L50-L83","documentation":"RequestNavigateEventArgs.InvokeEventHandler requires RoutedEvent to be set so it can correctly dispatch the typed handler. If the event args were raised without an associated RoutedEvent, dispatch cannot proceed and the method throws.","triggerScenarios":"Calling RaiseEvent with a RequestNavigateEventArgs whose RoutedEvent property was never assigned, or invoking InvokeEventHandler manually on detached args instead of through RaiseEvent on an element with a registered RequestNavigateEvent.","commonSituations":"Manually newing RequestNavigateEventArgs and raising it without setting RoutedEvent; copying args between events; custom automation code invoking handlers directly.","solutions":["Use NavigationService.RequestNavigate(uri) or element.RequestNavigate instead of manual raising.","If raising manually, set args.RoutedEvent = RequestNavigateEvent before RaiseEvent.","Raise on an element that has the RequestNavigateEvent routed event defined.","Construct args via the constructor overload that takes the RoutedEvent."],"exampleFix":"// before\nvar args = new RequestNavigateEventArgs(uri, \"target\");\ntextBlock.RaiseEvent(args);\n// after\nvar args = new RequestNavigateEventArgs(uri, \"target\") { RoutedEvent = Hyperlink.RequestNavigateEvent };\ntextBlock.RaiseEvent(args);","handlingStrategy":"type-guard","validationCode":"if (args.RoutedEvent == null) args.RoutedEvent = Hyperlink.RequestNavigateEvent;\nelement.RaiseEvent(args);","typeGuard":"bool CanRaise(RequestNavigateEventArgs a) => a.RoutedEvent != null;","tryCatchPattern":"try { element.RaiseEvent(args); }\ncatch (InvalidOperationException ex) when (ex.Message.Contains(\"RoutedEvent\"))\n{ NavigationService.RequestNavigate(args.Uri, args.Target); }","preventionTips":["Prefer NavigationService.RequestNavigate over manual raising.","Always assign RoutedEvent when constructing event args manually.","Raise routed events only via UIElement.RaiseEvent.","Avoid reusing EventArgs across different routed events."],"tags":["wpf","routedevent","navigation","eventargs"],"backgroundTag":"missing-required-argument","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"}