{"record":{"id":"da0029091b470327","repo":"dotnet/wpf","slug":"null-argument-targetobject","errorCode":null,"errorMessage":"null argument: targetObject","messagePattern":"null argument: targetObject","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Setter.cs","lineNumber":249,"sourceCode":"            if (me is StaticResourceExtension)\n            {\n                var sr = me as StaticResourceExtension;\n                setter.Value = sr.ProvideValueInternal(eventArgs.ServiceProvider, true /*allowDeferedReference*/);\n                eventArgs.Handled = true;\n            }\n            else if (me is DynamicResourceExtension || me is BindingBase)\n            {\n                setter.Value = me;\n                eventArgs.Handled = true;\n            }\n        }\n\n        public static void ReceiveTypeConverter(object targetObject, XamlSetTypeConverterEventArgs eventArgs)\n        {\n            Setter setter = targetObject as Setter;\n            if (setter == null)\n            {\n                throw new ArgumentNullException(nameof(targetObject));\n            }\n            ArgumentNullException.ThrowIfNull(eventArgs);\n\n            if (eventArgs.Member.Name == \"Property\")\n            {\n                setter._unresolvedProperty = eventArgs.Value;\n                setter._serviceProvider = eventArgs.ServiceProvider;\n                setter._cultureInfoForTypeConverter = eventArgs.CultureInfo;\n\n                eventArgs.Handled = true;\n            }\n            else if (eventArgs.Member.Name == \"Value\")\n            {\n                setter._unresolvedValue = eventArgs.Value;\n                setter._serviceProvider = eventArgs.ServiceProvider;\n                setter._cultureInfoForTypeConverter = eventArgs.CultureInfo;\n\n                eventArgs.Handled = true;","sourceCodeStart":231,"sourceCodeEnd":267,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Setter.cs#L231-L267","documentation":"ReceiveTypeConverter is the XAML callback invoked when a type converter sets a property on a Setter during XAML parsing. The first parameter must be the Setter instance being populated; if targetObject is null or not castable to Setter, ArgumentNullException is thrown (message 'null argument: targetObject').","triggerScenarios":"Calling Setter.ReceiveTypeConverter(null, args) directly, or a custom XAML schema context/serializer invoking the callback with a non-Setter target object.","commonSituations":"Custom XAML infrastructure or unit tests invoking the callback manually; tooling that re-implements XAML parsing of styles.","solutions":["Pass the actual Setter instance as targetObject when invoking the callback.","Ensure the XAML object being constructed really is a Setter before routing the callback to it.","If building tooling, instantiate the Setter first (or let the XAML engine construct it) before raising the type-converter callback."],"exampleFix":"// before\nSetter.ReceiveTypeConverter(null, eventArgs);\n// after\nSetter.ReceiveTypeConverter(mySetterInstance, eventArgs);","handlingStrategy":"type-guard","validationCode":"if (targetObject is not Setter setter) throw new ArgumentNullException(nameof(targetObject));","typeGuard":"static bool IsSetterCallbackTarget(object o) => o is Setter;","tryCatchPattern":"try { Setter.ReceiveTypeConverter(obj, args); }\ncatch (ArgumentNullException) { /* pass the real Setter instance */ }","preventionTips":["Only invoke the XAML callback with the live Setter instance being parsed","Do not call ReceiveTypeConverter manually outside custom XAML infrastructure"],"tags":["wpf","xaml","null-argument"],"backgroundTag":"null-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"}