dotnet/wpf · error · ArgumentException

SR.Format(SR.GridCollection_MustBeCertainType…

Error message

SR.Format(SR.GridCollection_MustBeCertainType, "ColumnDefinitionCollection", "ColumnDefinition")

What it means

ArgumentException from ColumnDefinitionCollection.PrivateValidateValueForAddition (Add/Insert guard): the value being added is not a ColumnDefinition, and the grid's strongly-typed collection accepts only ColumnDefinition items.

Solutions

  1. Add only ColumnDefinition instances to ColumnDefinitionCollection
  2. Use the typed AddColumn/Insert overloads rather than the generic collection APIs

Example fix

// before
columns.Add(new RowDefinition());
// after
columns.Add(new ColumnDefinition());
Defensive patterns

Strategy: type-guard

Validate before calling

if (item is not ColumnDefinition) throw new ArgumentException("Expected a ColumnDefinition for ColumnDefinitions.");

Type guard

bool IsColumnDefinition(object o) => o is ColumnDefinition;

Try / catch

try { cols.Add(obj); } catch (ArgumentException ex) { log.Warn("Not a ColumnDefinition", ex); }

Prevention

When it happens

Trigger: Calling grid.ColumnDefinitions.Add(obj) or Insert(obj, i) where obj is null-cast-checked but not a ColumnDefinition — e.g. a RowDefinition, an arbitrary UIElement, or an object from an untyped source.

Common situations: Adding items from an untyped ArrayList/object list to ColumnDefinitions instead of RowDefinitions; reflection- or data-driven code inserting definitions into the wrong collection.

Understand the failure class

Background: Type mismatch errors: IllegalArgumentException, TypeError and type guards across 150 open-source libraries — this error's family across 150 libraries.

Related errors


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

Appendix: source

Thrown at src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Controls/ColumnDefinition.cs:593

        {
            if (this.IsReadOnly)
            {
                throw new InvalidOperationException(SR.Format(SR.GridCollection_CannotModifyReadOnly, "ColumnDefinitionCollection"));
            }
        }

        /// <summary>
        ///     Throws if value is not something the collection expects.
        /// </summary>
        private void PrivateValidateValueForAddition(object value)
        {
            ArgumentNullException.ThrowIfNull(value);

            ColumnDefinition item = value as ColumnDefinition;

            if (item == null)
            {
                throw new ArgumentException(SR.Format(SR.GridCollection_MustBeCertainType, "ColumnDefinitionCollection", "ColumnDefinition"));
            }

            if (item.Parent != null)
            {
                throw new ArgumentException(SR.Format(SR.GridCollection_InOtherCollection, "value", "ColumnDefinitionCollection"));
            }
        }

        /// <summary>
        ///     Throws if value is not something the collection expects.
        ///     Returns true if value belongs to the collection.
        /// </summary>
        private bool PrivateValidateValueForRemoval(object value)
        {
            ArgumentNullException.ThrowIfNull(value);

            ColumnDefinition item = value as ColumnDefinition;

View on GitHub (pinned to 81131a70a4)