diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs index 709a935450..f579bf0a62 100644 --- a/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs +++ b/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs @@ -179,7 +179,12 @@ namespace Avalonia.Rendering.SceneGraph /// The scene that the node is a part of. public void SortChildren(Scene scene) { - var keys = new List(); + if (_children == null || _children.Count <= 1) + { + return; + } + + var keys = new List(Visual.VisualChildren.Count); 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); + } } }