public void Should_Update_VisualNode_Order_On_ZIndex_Change_With_Dirty_Ancestor() { using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface)) { var dispatcher = new ImmediateDispatcher(); var loop = new Mock <IRenderLoop>(); StackPanel stack; Canvas canvas1; Canvas canvas2; var root = new TestRoot { Child = stack = new StackPanel { Children = { (canvas1 = new Canvas { ZIndex =1 }), (canvas2= new Canvas { ZIndex = 2 }), } } }; var sceneBuilder = new SceneBuilder(); var target = new DeferredRenderer( root, loop.Object, sceneBuilder: sceneBuilder, dispatcher: dispatcher); root.Renderer = target; target.Start(); RunFrame(target); root.InvalidateVisual(); canvas1.ZIndex = 3; RunFrame(target); var scene = target.UnitTestScene(); var stackNode = scene.FindNode(stack); Assert.Same(stackNode.Children[0].Visual, canvas2); Assert.Same(stackNode.Children[1].Visual, canvas1); } }