dotnet/wpf · error · ArgumentNullException
null argument: targetObject
Error message
null argument: targetObject
What it means
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').
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.
Example fix
// before Setter.ReceiveTypeConverter(null, eventArgs); // after Setter.ReceiveTypeConverter(mySetterInstance, eventArgs);
Defensive patterns
Strategy: type-guard
Validate before calling
if (targetObject is not Setter setter) throw new ArgumentNullException(nameof(targetObject));
Type guard
static bool IsSetterCallbackTarget(object o) => o is Setter;
Try / catch
try { Setter.ReceiveTypeConverter(obj, args); }
catch (ArgumentNullException) { /* pass the real Setter instance */ } Prevention
- Only invoke the XAML callback with the live Setter instance being parsed
- Do not call ReceiveTypeConverter manually outside custom XAML infrastructure
When it happens
Trigger: Calling Setter.ReceiveTypeConverter(null, args) directly, or a custom XAML schema context/serializer invoking the callback with a non-Setter target object.
Common situations: Custom XAML infrastructure or unit tests invoking the callback manually; tooling that re-implements XAML parsing of styles.
Related errors
- ArgumentNullException(nameof(clrNamespace))
- ArgumentNullException(nameof(contentType))
- ArgumentNullException(nameof(loaderType))
- ArgumentNullException(nameof(newNamespace))
- ArgumentNullException(nameof(oldNamespace))
AI-assisted analysis of dotnet/wpf@81131a70a4 (2026-09-14).
Data as JSON: /api/errors/da0029091b470327.
Report an issue: GitHub.
Appendix: source
Thrown at src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Setter.cs:249
if (me is StaticResourceExtension)
{
var sr = me as StaticResourceExtension;
setter.Value = sr.ProvideValueInternal(eventArgs.ServiceProvider, true /*allowDeferedReference*/);
eventArgs.Handled = true;
}
else if (me is DynamicResourceExtension || me is BindingBase)
{
setter.Value = me;
eventArgs.Handled = true;
}
}
public static void ReceiveTypeConverter(object targetObject, XamlSetTypeConverterEventArgs eventArgs)
{
Setter setter = targetObject as Setter;
if (setter == null)
{
throw new ArgumentNullException(nameof(targetObject));
}
ArgumentNullException.ThrowIfNull(eventArgs);
if (eventArgs.Member.Name == "Property")
{
setter._unresolvedProperty = eventArgs.Value;
setter._serviceProvider = eventArgs.ServiceProvider;
setter._cultureInfoForTypeConverter = eventArgs.CultureInfo;
eventArgs.Handled = true;
}
else if (eventArgs.Member.Name == "Value")
{
setter._unresolvedValue = eventArgs.Value;
setter._serviceProvider = eventArgs.ServiceProvider;
setter._cultureInfoForTypeConverter = eventArgs.CultureInfo;
eventArgs.Handled = true;View on GitHub (pinned to 81131a70a4)