stride3d/stride · error · ArgumentNullException
Value cannot be null. (Parameter 'uiElementType')
Error message
Value cannot be null. (Parameter 'uiElementType')
What it means
Argument-null validation in RendererManager.RegisterRendererFactory: the uiElementType parameter is null. The method maps a UIElement-derived type to a renderer factory; a null type key cannot be registered or later matched during renderer lookup, so the call is rejected with ArgumentNullException named 'uiElementType'.
Solutions
- Pass a non-null Type derived from UIElement as the uiElementType argument to RegisterRendererFactory.
- At the call site, check the type variable for null (e.g. after reflection lookups like Assembly.GetType) before calling RegisterRendererFactory.
- If the type is resolved dynamically, fail fast with a clear log message instead of passing null into the registration API.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at sources/engine/Stride.UI/Renderers/RendererManager.cs:64 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/3d34b5047d4e896b.
Report an issue: GitHub.
Appendix: source
Thrown at sources/engine/Stride.UI/Renderers/RendererManager.cs:64
}
// try to get the renderer from the default renderer factory.
if (elementRenderer == null && defaultFactory != null)
elementRenderer = defaultFactory.TryCreateRenderer(element);
if (elementRenderer == null)
throw new InvalidOperationException($"No renderer found for element {element}");
// cache the renderer for future uses.
elementIdToRenderer[element.Id] = elementRenderer;
}
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()
{View on GitHub (pinned to 96fad776d2)