dotnet/wpf · error · ArgumentNullException

ArgumentNullException (nameof(targetObject))

Error message

ArgumentNullException (nameof(targetObject))

What it means

Trigger.ReceiveTypeConverter is the XAML callback for x:SetTypeConverter. It casts targetObject to Trigger and, if the cast yields null (including when targetObject is null), throws ArgumentNullException(nameof(targetObject)) — this callback must only ever be invoked with a Trigger target.

Solutions

  1. Ensure the callback is only wired to Trigger instances (via [XamlSetTypeConverter] on Trigger) and not other types.
  2. Guard before invoking: if (targetObject is Trigger) Trigger.ReceiveTypeConverter(targetObject, e);
  3. If using a custom XAML parser, verify it honors the attribute's declaring type when routing callbacks.

Example fix

// before
Trigger.ReceiveTypeConverter(notATrigger, eventArgs); // throws
// after
if (notATrigger is Trigger t) { /* let XAML invoke it, or */ Trigger.ReceiveTypeConverter(t, eventArgs); }
Defensive patterns

Strategy: type-guard

Validate before calling

if (targetObject is not Trigger) throw new ArgumentException("ReceiveTypeConverter must be invoked with a Trigger target");

Type guard

static bool IsTriggerTarget(object o) => o is Trigger;

Try / catch

try { Trigger.ReceiveTypeConverter(targetObject, eventArgs); }
catch (ArgumentNullException ex) { log.Error($"Unexpected XAML callback target: {ex.Message}"); }

Prevention

When it happens

Trigger: The XAML type-converter-set callback invoked with a targetObject that is not a Trigger (or null) — essentially only from custom/broken XAML parsing infrastructure or a misregistered callback.

Common situations: Custom XAML schema contexts or third-party XAML parsers invoking the callback incorrectly; reflection-driven code calling ReceiveTypeConverter directly with a wrong target.

Related errors


AI-assisted analysis of dotnet/wpf@81131a70a4 (2026-09-14). Data as JSON: /api/errors/7eae9262dde69c55. Report an issue: GitHub.

Appendix: source

Thrown at src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Trigger.cs:285

                        Property, _cultureInfoForTypeConverter, _unresolvedValue);
                }
                finally
                {
                    _unresolvedValue = null;
                }
            }
            _serviceProvider = null;
            _cultureInfoForTypeConverter = null;
        }

        #endregion

        public static void ReceiveTypeConverter(object targetObject, XamlSetTypeConverterEventArgs eventArgs)
        {
            Trigger trigger = targetObject as Trigger;
            if (trigger == null)
            {
                throw new ArgumentNullException(nameof(targetObject));
            }
            ArgumentNullException.ThrowIfNull(eventArgs);

            if (eventArgs.Member.Name == "Property")
            {
                trigger._unresolvedProperty = eventArgs.Value;
                trigger._serviceProvider = eventArgs.ServiceProvider;
                trigger._cultureInfoForTypeConverter = eventArgs.CultureInfo;

                eventArgs.Handled = true;
            }
            else if (eventArgs.Member.Name == "Value")
            {
                trigger._unresolvedValue = eventArgs.Value;
                trigger._serviceProvider = eventArgs.ServiceProvider;
                trigger._cultureInfoForTypeConverter = eventArgs.CultureInfo;

                eventArgs.Handled = true;

View on GitHub (pinned to 81131a70a4)