dotnet/wpf · error

ArgumentNullException(nameof(propertyName))

Error message

ArgumentNullException(nameof(propertyName))

What it means

XamlPropertyBaseNode requires a non-null property name; the node represents a property assignment in the XAML node stream. A null propertyName makes the node meaningless, so ArgumentNullException(nameof(propertyName)) is thrown immediately after the typeFullName check.

Solutions

  1. Resolve the property/member name before constructing the node.
  2. Guard the call site with a null/empty check on the property name.
  3. Skip or log the malformed property node instead of constructing it with a null name.

Example fix

// before
var node = new XamlPropertyBaseNode(propertyMember, assemblyName, typeFullName, null, ...);
// after
if (string.IsNullOrEmpty(propertyName)) throw new ArgumentException("property name required", nameof(propertyName));
var node = new XamlPropertyBaseNode(propertyMember, assemblyName, typeFullName, propertyName, ...);
Defensive patterns

Strategy: validation

Validate before calling

if (string.IsNullOrEmpty(propertyName)) throw new InvalidOperationException("Property node requires a resolved member name");

Type guard

bool HasPropertyName(XamlMember member) => !string.IsNullOrEmpty(member?.Name);

Try / catch

try { node = new XamlPropertyBaseNode(...); }
catch (ArgumentNullException) { /* skip/log malformed property node */ }

Prevention

When it happens

Trigger: Constructing XamlPropertyBaseNode with propertyName == null, e.g. custom reader code emitting a property node whose member name was not resolved.

Common situations: Custom XAML node-stream generators, markup extensions whose member resolution failed, tooling that rewrites XAML node streams.

Related errors


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

Appendix: source

Thrown at src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/XamlNodes.cs:435

                int         lineNumber,
                int         linePosition,
                int         depth,
                object      propertyMember,    // DependencyProperty or MethodInfo or PropertyInfo
                string      assemblyName,
                string      typeFullName,
                string      propertyName)
                : base (token,
                        lineNumber,
                        linePosition,
                        depth)
            {
                if (typeFullName == null)
                {
                    throw new ArgumentNullException(nameof(typeFullName));
                }
                if (propertyName == null)
                {
                    throw new ArgumentNullException(nameof(propertyName));
                }
                
                _propertyMember = propertyMember;
                _assemblyName = assemblyName;
                _typeFullName = typeFullName;
                _propName = propertyName;
            }
            
#if PBTCOMPILER
            /// <summary>
            /// PropertyInfo for the property for the Node.  This may be null.
            /// </summary>
            internal PropertyInfo PropInfo
            {
                get { return _propertyMember as PropertyInfo;}
            }
#endif

View on GitHub (pinned to 81131a70a4)