diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs
index 709a935450..c3dfe12b2d 100644
--- a/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs
+++ b/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs
@@ -179,6 +179,11 @@ namespace Avalonia.Rendering.SceneGraph
/// The scene that the node is a part of.
public void SortChildren(Scene scene)
{
+ if (_children == null || _children.Count <= 1)
+ {
+ return;
+ }
+
var keys = new List();
for (var i = 0; i < Visual.VisualChildren.Count; ++i)
diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/VisualNodeTests.cs b/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/VisualNodeTests.cs
index 1101ccacba..24ba2d1c48 100644
--- a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/VisualNodeTests.cs
+++ b/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/VisualNodeTests.cs
@@ -92,5 +92,14 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph
Assert.Same(node1.DrawOperations[0].Item, node2.DrawOperations[0].Item);
Assert.NotSame(node1.DrawOperations[0], node2.DrawOperations[0]);
}
+
+ [Fact]
+ public void SortChildren_Does_Not_Throw_On_Null_Children()
+ {
+ var node = new VisualNode(Mock.Of(), null);
+ var scene = new Scene(Mock.Of());
+
+ node.SortChildren(scene);
+ }
}
}