diff --git a/src/Perspex.Controls/ContextMenu.cs b/src/Perspex.Controls/ContextMenu.cs
index 85acddfe3a..bc7c785f8f 100644
--- a/src/Perspex.Controls/ContextMenu.cs
+++ b/src/Perspex.Controls/ContextMenu.cs
@@ -61,10 +61,7 @@
///
public void Hide()
{
- foreach (MenuItem i in this.GetLogicalChildren())
- {
- i.IsSubMenuOpen = false;
- }
+
if (_popup != null && _popup.IsVisible)
{
@@ -91,6 +88,8 @@
PlacementTarget = control,
StaysOpen = false
};
+
+ _popup.Closed += PopupClosed;
}
((ISetLogicalParent)_popup).SetParent(control);
@@ -102,6 +101,20 @@
}
}
+ private static void PopupClosed(object sender, EventArgs e)
+ {
+ var contextMenu = (sender as Popup)?.Child as ContextMenu;
+
+ if (contextMenu != null)
+ {
+ foreach (MenuItem i in contextMenu.GetLogicalChildren())
+ {
+ i.IsSubMenuOpen = false;
+ }
+
+ contextMenu._isOpen = false;
+ }
+ }
private void PopupOpened(object sender, EventArgs e)
{
diff --git a/src/Perspex.Themes.Default/ContextMenu.paml b/src/Perspex.Themes.Default/ContextMenu.paml
index 3a0bbcda75..ed491ebe24 100644
--- a/src/Perspex.Themes.Default/ContextMenu.paml
+++ b/src/Perspex.Themes.Default/ContextMenu.paml
@@ -2,6 +2,8 @@
+
+