From 534852af75bc83c3a4c1681f51cb13cba8ea7f70 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Wed, 16 Oct 2019 10:53:24 +0200 Subject: [PATCH] Create VisualNode for invisible controls. If we don't do this, then a `VisualNode` can appear twice in its parent `ChildrenCollection` when an earlier sibling is made invisible. Fixes #3115 --- src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs | 4 ++++ .../Rendering/SceneGraph/SceneBuilderTests.cs | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs index 161cbc099e..87c9ed0bae 100644 --- a/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs +++ b/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs @@ -240,6 +240,10 @@ namespace Avalonia.Rendering.SceneGraph } } } + else + { + contextImpl.BeginUpdate(node).Dispose(); + } } private void UpdateSize(Scene scene) diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs b/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs index e226a61659..5fd14e9ea9 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs +++ b/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs @@ -624,8 +624,9 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph var panelNode = (VisualNode)scene.FindNode(panel); sceneBuilder.Update(scene, decorator); - Assert.Equal(1, panelNode.Children.Count); + Assert.Equal(2, panelNode.Children.Count); Assert.False(panelNode.Children[0].Disposed); + Assert.False(panelNode.Children[1].Disposed); } }