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
- Add only ColumnDefinition instances to ColumnDefinitionCollection
- 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
- Keep row and column definition collections separate
- Use the generic IEnumerable<ColumnDefinition> surface
- Type-check untyped data before inserting
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
- SR.GridCollection_MustBeCertainType…
- SR.BadFixedTextPosition
- SR.Collection_BadType
- SR.Format(SR.Animation_AnimationTimelineTypeMismatch…
- SR.Format(SR.Animation_AnimationTimelineTypeMismatch…
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)