diff --git a/src/Avalonia.Base/StyledElement.cs b/src/Avalonia.Base/StyledElement.cs index b51093b40c..731cb97161 100644 --- a/src/Avalonia.Base/StyledElement.cs +++ b/src/Avalonia.Base/StyledElement.cs @@ -891,7 +891,7 @@ namespace Avalonia for (var i = 0; i < logicalChildrenCount; i++) { - if (logicalChildren[i] is StyledElement child) + if (logicalChildren[i] is StyledElement child && child._logicalRoot != e.Root) // child may already have been attached within an event handler { child.OnAttachedToLogicalTreeCore(e); } diff --git a/src/Avalonia.Base/Visual.cs b/src/Avalonia.Base/Visual.cs index b4c5b2a1d2..05159eb4ae 100644 --- a/src/Avalonia.Base/Visual.cs +++ b/src/Avalonia.Base/Visual.cs @@ -487,7 +487,7 @@ namespace Avalonia for (var i = 0; i < visualChildrenCount; i++) { - if (visualChildren[i] is { } child) + if (visualChildren[i] is { } child && child._visualRoot != e.Root) // child may already have been attached within an event handler { child.OnAttachedToVisualTreeCore(e); } diff --git a/tests/Avalonia.Controls.UnitTests/MenuItemTests.cs b/tests/Avalonia.Controls.UnitTests/MenuItemTests.cs index fc189fb3c3..bbe46b2b21 100644 --- a/tests/Avalonia.Controls.UnitTests/MenuItemTests.cs +++ b/tests/Avalonia.Controls.UnitTests/MenuItemTests.cs @@ -250,13 +250,13 @@ namespace Avalonia.Controls.UnitTests Assert.Equal(0, canExecuteCallCount); flyout.ShowAt(button); - Assert.Equal(2, canExecuteCallCount); + Assert.Equal(1, canExecuteCallCount); command.RaiseCanExecuteChanged(); - Assert.Equal(3, canExecuteCallCount); + Assert.Equal(2, canExecuteCallCount); target.CommandParameter = true; - Assert.Equal(4, canExecuteCallCount); + Assert.Equal(3, canExecuteCallCount); } }