dotnet/maui · error · ArgumentNullException

renderer

Error message

renderer

What it means

VisualElementPackager constructor throws ArgumentNullException when the renderer parameter is null. The packager manages child VisualElements within a renderer's container panel and requires the renderer to access its Element and ContainerElement.

Source

Thrown at src/Compatibility/Core/src/Windows/VisualElementPackager.cs:24

namespace Microsoft.Maui.Controls.Compatibility.Platform.UWP
{
	[Obsolete]
	public class VisualElementPackager : IDisposable
	{
		readonly int _column;
		readonly int _columnSpan;

		readonly Panel _panel;
		readonly IVisualElementRenderer _renderer;
		readonly int _row;
		readonly int _rowSpan;
		bool _disposed;
		bool _isLoaded;

		public VisualElementPackager(IVisualElementRenderer renderer)
		{
			if (renderer == null)
				throw new ArgumentNullException("renderer");

			_renderer = renderer;

			_panel = renderer.ContainerElement as Panel;
			if (_panel == null)
				throw new ArgumentException("Renderer's container element must be a Panel");
		}

		public VisualElementPackager(IVisualElementRenderer renderer, int row = 0, int rowSpan = 0, int column = 0, int columnSpan = 0) : this(renderer)
		{
			_row = row;
			_rowSpan = rowSpan;
			_column = column;
			_columnSpan = columnSpan;
		}

		IElementController ElementController => _renderer.Element as IElementController;

View on GitHub (pinned to f377ff1c5e)

Solutions

  1. Ensure the renderer is fully constructed before creating the VisualElementPackager
  2. Null-check the renderer before passing it to the constructor
  3. Review the renderer initialization sequence in OnElementChanged

Example fix

// before
var packager = new VisualElementPackager(null); // throws

// after
if (renderer == null)
    throw new InvalidOperationException("Renderer must be created first");
var packager = new VisualElementPackager(renderer);
Defensive patterns

Strategy: validation

Validate before calling

// Before constructing VisualElementPackager, null-check the renderer
if (renderer == null)
    throw new ArgumentNullException(nameof(renderer), "Renderer must be created before packager");
var packager = new VisualElementPackager(renderer);

Prevention

When it happens

Trigger: Constructing a VisualElementPackager with a null renderer reference — e.g. during custom renderer setup when the renderer hasn't been created yet, or when a factory method returned null.

Common situations: Custom renderer's OnElementChanged creates a packager before the renderer is fully initialized; packager construction order error in composite renderers.

Related errors


AI-assisted analysis of dotnet/maui@f377ff1c5e (2026-08-13). Data as JSON: /api/errors/4636d060a2f4a1f8. Report an issue: GitHub.