diff --git a/src/Avalonia.Controls/Primitives/Popup.cs b/src/Avalonia.Controls/Primitives/Popup.cs index ae62922cb0..c548d107a1 100644 --- a/src/Avalonia.Controls/Primitives/Popup.cs +++ b/src/Avalonia.Controls/Primitives/Popup.cs @@ -182,6 +182,8 @@ namespace Avalonia.Controls.Primitives /// IVisual IVisualTreeHost.Root => _popupRoot; + bool _ignoreIsOpenChanged = false; + /// /// Opens the popup. /// @@ -220,7 +222,11 @@ namespace Avalonia.Controls.Primitives PopupRootCreated?.Invoke(this, EventArgs.Empty); _popupRoot.Show(); + + _ignoreIsOpenChanged = true; IsOpen = true; + _ignoreIsOpenChanged = false; + Opened?.Invoke(this, EventArgs.Empty); } @@ -283,13 +289,16 @@ namespace Avalonia.Controls.Primitives /// The event args. private void IsOpenChanged(AvaloniaPropertyChangedEventArgs e) { - if ((bool)e.NewValue) + if (!_ignoreIsOpenChanged) { - Open(); - } - else - { - Close(); + if ((bool)e.NewValue) + { + Open(); + } + else + { + Close(); + } } }