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();
+ }
}
}