stride3d/stride · error · ArgumentNullException
Value cannot be null. (Parameter 'element')
Error message
Value cannot be null. (Parameter 'element')
What it means
Argument-null validation in RendererManager.RegisterRenderer (invoked via RegisterRendererFactory's registration path): the element parameter is null. The renderer registration needs the concrete UIElement instance to associate with the created renderer; a null element cannot be keyed in elementIdToRenderer, so the call is rejected with ArgumentNullException named 'element'.
Solutions
- Pass a fully constructed, non-null UIElement instance to RegisterRenderer.
- Check the element for null at the call site (e.g. when it comes from a lookup, hit-test or factory that can return null) before registering its renderer.
- Delay registration until the element has actually been created rather than registering a placeholder null.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at sources/engine/Stride.UI/Renderers/RendererManager.cs:75 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of stride3d/stride@96fad776d2 (2026-09-14).
Data as JSON: /api/errors/28f9afba5549f946.
Report an issue: GitHub.
Appendix: source
Thrown at sources/engine/Stride.UI/Renderers/RendererManager.cs:75
}
return elementRenderer;
}
public void RegisterRendererFactory(Type uiElementType, IElementRendererFactory factory)
{
if (uiElementType == null) throw new ArgumentNullException(nameof(uiElementType));
if (factory == null) throw new ArgumentNullException(nameof(factory));
if (!typeof(UIElement).GetTypeInfo().IsAssignableFrom(uiElementType.GetTypeInfo()))
throw new InvalidOperationException(uiElementType + " is not a descendant of UIElement.");
typesToUserFactories[uiElementType] = factory;
}
public void RegisterRenderer(UIElement element, ElementRenderer renderer)
{
if (element == null) throw new ArgumentNullException(nameof(element));
if (renderer == null) throw new ArgumentNullException(nameof(renderer));
elementIdToRenderer[element.Id] = renderer;
}
public void Dispose()
{
foreach (var renderer in elementIdToRenderer.Values)
{
if (!renderer.IsDisposed)
renderer.Dispose();
}
elementIdToRenderer.Clear();
}
}
}
View on GitHub (pinned to 96fad776d2)