{"record":{"id":"f53ed0c52362b2c6","repo":"HandyOrg/HandyControl","slug":"exceptionstringtable-f53ed0","errorCode":null,"errorMessage":"ExceptionStringTable.EventTriggerBaseInvalidEventExceptionMessage","messagePattern":"ExceptionStringTable\\.EventTriggerBaseInvalidEventExceptionMessage","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Shared/System.Windows.Interactivity/EventTriggerBase.cs","lineNumber":239,"sourceCode":"                base2.UnregisterEvent(newSource, base2.GetEventName());\n            base2.OnSourceChanged(args.OldValue, args.NewValue);\n        }\n    }\n\n    private void RegisterEvent(object obj, string eventName)\n    {\n        var eventInfo = obj.GetType().GetEvent(eventName);\n        if (eventInfo == null)\n        {\n            if (SourceObject != null)\n                throw new ArgumentException(string.Format(CultureInfo.CurrentCulture,\n                    ExceptionStringTable.EventTriggerCannotFindEventNameExceptionMessage,\n                    new object[] { eventName, obj.GetType().Name }));\n        }\n        else if (!IsValidEvent(eventInfo))\n        {\n            if (SourceObject != null)\n                throw new ArgumentException(string.Format(CultureInfo.CurrentCulture,\n                    ExceptionStringTable.EventTriggerBaseInvalidEventExceptionMessage,\n                    new object[] { eventName, obj.GetType().Name }));\n        }\n        else\n        {\n            _eventHandlerMethodInfo =\n                typeof(EventTriggerBase).GetMethod(\"OnEventImpl\", BindingFlags.NonPublic | BindingFlags.Instance);\n            eventInfo.AddEventHandler(obj,\n                Delegate.CreateDelegate(eventInfo.EventHandlerType, this, _eventHandlerMethodInfo ?? throw new InvalidOperationException()));\n        }\n    }\n\n    private void RegisterLoaded(FrameworkElement associatedElement)\n    {\n        if (!IsLoadedRegistered && associatedElement != null)\n        {\n            associatedElement.Loaded += OnEventImpl;\n            IsLoadedRegistered = true;","sourceCodeStart":221,"sourceCodeEnd":257,"githubUrl":"https://github.com/HandyOrg/HandyControl/blob/2c0875ebd67326e0c67282967e3e809c69282fee/src/Shared/System.Windows.Interactivity/EventTriggerBase.cs#L221-L257","documentation":"RegisterEvent finds the event but rejects it if IsValidEvent(eventInfo) fails — typically the event's handler signature is not compatible with the trigger's expected EventHandler/EventArgs shape. When a SourceObject is set, ArgumentException EventTriggerBaseInvalidEventExceptionMessage is thrown naming the event and the type.","triggerScenarios":"EventName resolves to an event whose signature does not pass IsValidEvent (e.g. a custom delegate not derived from EventHandler pattern expected by EventTriggerBase), raised from OnEventNameChanged or OnSourceChangedImpl.","commonSituations":"Pointing EventTrigger at a custom event with a non-standard delegate type; targeting routed events with mismatched EventArgs; using an event on a POCO whose delegate doesn't match the trigger's required handler signature.","solutions":["Point EventName at an event with a compatible signature (object, EventArgs-derived) for the trigger type.","Change the event's delegate type to EventHandler<TEventArgs> or the required signature.","Use a custom EventTriggerBase subclass overriding IsValidEvent if you must support non-standard events.","Attach the trigger to a different source object that exposes a standard event."],"exampleFix":"// before\npublic event MyCustomDelegate SomethingHappened; // invalid signature for EventTrigger\n// after\npublic event EventHandler SomethingHappened;","handlingStrategy":"validation","validationCode":"var evt = sourceObject?.GetType().GetEvent(eventName);\nif (evt != null && !typeof(EventHandler).IsAssignableFrom(evt.EventHandlerType) &&\n    !(evt.EventHandlerType.IsGenericType && typeof(EventHandler<>).MakeGenericType(evt.EventHandlerType.GetGenericArguments()[0]).IsAssignableFrom(evt.EventHandlerType)))\n    Console.WriteLine($\"Event '{eventName}' has an unsupported handler signature\");","typeGuard":"static bool HasCompatibleSignature(EventInfo e) =>\n    e != null && typeof(Delegate).IsAssignableFrom(e.EventHandlerType) &&\n    e.EventHandlerType.GetMethod(\"Invoke\").GetParameters().Length == 2;","tryCatchPattern":"try { trigger.Attach(associatedObject); }\ncatch (ArgumentException ex) when (ex.Message.Contains(\"InvalidEvent\")) {\n    // use a standard EventHandler-based event or override IsValidEvent\n}","preventionTips":["Expose custom events with EventHandler/EventHandler<TEventArgs>.","Only point EventTrigger at events with (object, EventArgs) signatures.","For non-standard events, subclass EventTriggerBase and override IsValidEvent.","Prefer routed events for WPF sources."],"tags":["wpf","interactivity","reflection","event-signature","invalid-argument-value"],"backgroundTag":"invalid-argument-value","analyzedSha":"2c0875ebd67326e0c67282967e3e809c69282fee","analyzedAt":"2026-09-14T14:45:29.754Z","contentChangedAt":"2026-09-14T14:45:29.754Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}