diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs index e54648fe8d..720993b31a 100644 --- a/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs +++ b/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs @@ -274,7 +274,7 @@ namespace Avalonia.Rendering.SceneGraph } } - if (node.LayerRoot == node.Visual) + if (node.LayerRoot == node.Visual && node.Visual != scene.Root.Visual) { scene.Layers.Remove(node.LayerRoot); } diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests_Layers.cs b/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests_Layers.cs index e65487ac44..13f28018db 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests_Layers.cs +++ b/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests_Layers.cs @@ -273,5 +273,32 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph ((MockStreamGeometryImpl)borderLayer.GeometryClip).Transform); } } + + [Fact] + public void Hiding_Root_Should_Not_Remove_Root_Layer() + { + using (TestApplication()) + { + Border border; + var tree = new TestRoot + { + Child = border = new Border() + }; + + var layout = AvaloniaLocator.Current.GetService(); + layout.ExecuteInitialLayoutPass(tree); + + var scene = new Scene(tree); + var sceneBuilder = new SceneBuilder(); + sceneBuilder.UpdateAll(scene); + + tree.IsVisible = false; + + scene = scene.Clone(); + sceneBuilder.Update(scene, tree); + + Assert.Equal(1, scene.Layers.Count); + } + } } }