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
- Ensure the renderer is fully constructed before creating the VisualElementPackager
- Null-check the renderer before passing it to the constructor
- 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
- Ensure the renderer is fully constructed before creating a VisualElementPackager
- Initialize the packager in OnElementChanged after the renderer is bound
- Null-check renderer references in custom renderer setup code
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
- self
- page
- Element must be a TabbedPage
- Renderer's container element must be a Panel
- Could not find or create a renderer for {visualElement}
AI-assisted analysis of dotnet/maui@f377ff1c5e (2026-08-13).
Data as JSON: /api/errors/4636d060a2f4a1f8.
Report an issue: GitHub.