diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs index 2fcea8c205..161cbc099e 100644 --- a/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs +++ b/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs @@ -53,6 +53,16 @@ namespace Avalonia.Rendering.SceneGraph if (visual.VisualRoot != null) { + if (node?.Parent != null && + visual.VisualParent != null && + node.Parent.Visual != visual.VisualParent) + { + // The control has changed parents. Remove the node and recurse into the new parent node. + ((VisualNode)node.Parent).RemoveChild(node); + Deindex(scene, node); + node = (VisualNode)scene.FindNode(visual.VisualParent); + } + if (visual.IsVisible) { // If the node isn't yet part of the scene, find the nearest ancestor that is.