diff --git a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs
index 536e0831ed..bf1799bbdc 100644
--- a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs
+++ b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs
@@ -561,7 +561,6 @@ namespace Avalonia.Rendering
}
}
- System.Diagnostics.Debug.WriteLine("Invalidated " + rect);
SceneInvalidated(this, new SceneInvalidatedEventArgs((IRenderRoot)_root, rect));
}
}
diff --git a/src/Avalonia.Visuals/Visual.cs b/src/Avalonia.Visuals/Visual.cs
index 89d09ae58d..1f2d67b69e 100644
--- a/src/Avalonia.Visuals/Visual.cs
+++ b/src/Avalonia.Visuals/Visual.cs
@@ -514,7 +514,9 @@ namespace Avalonia
/// The event args.
private static void ZIndexChanged(AvaloniaPropertyChangedEventArgs e)
{
- var parent = (e.Sender as Visual)?._visualParent;
+ var sender = e.Sender as IVisual;
+ var parent = sender?.VisualParent;
+ sender?.InvalidateVisual();
parent?.VisualRoot?.Renderer?.RecalculateChildren(parent);
}
diff --git a/tests/Avalonia.Visuals.UnitTests/VisualTests.cs b/tests/Avalonia.Visuals.UnitTests/VisualTests.cs
index 504f0ada86..936a5d16a2 100644
--- a/tests/Avalonia.Visuals.UnitTests/VisualTests.cs
+++ b/tests/Avalonia.Visuals.UnitTests/VisualTests.cs
@@ -282,5 +282,52 @@ namespace Avalonia.Visuals.UnitTests
Assert.True(called);
}
+
+ [Fact]
+ public void Changing_ZIndex_Should_InvalidateVisual()
+ {
+ Canvas canvas1;
+ var renderer = new Mock();
+ var root = new TestRoot
+ {
+ Child = new StackPanel
+ {
+ Children =
+ {
+ (canvas1 = new Canvas()),
+ new Canvas(),
+ },
+ },
+ };
+
+ root.Renderer = renderer.Object;
+ canvas1.ZIndex = 10;
+
+ renderer.Verify(x => x.AddDirty(canvas1));
+ }
+
+ [Fact]
+ public void Changing_ZIndex_Should_Recalculate_Parent_Children()
+ {
+ Canvas canvas1;
+ StackPanel stackPanel;
+ var renderer = new Mock();
+ var root = new TestRoot
+ {
+ Child = stackPanel = new StackPanel
+ {
+ Children =
+ {
+ (canvas1 = new Canvas()),
+ new Canvas(),
+ },
+ },
+ };
+
+ root.Renderer = renderer.Object;
+ canvas1.ZIndex = 10;
+
+ renderer.Verify(x => x.RecalculateChildren(stackPanel));
+ }
}
}