From 13f0d4d5305348ebed716ad1765702a57996f8a8 Mon Sep 17 00:00:00 2001 From: danwalmsley Date: Thu, 4 Feb 2016 19:57:23 +0000 Subject: [PATCH] contextmenu sub menus now close when context is lost. --- src/Perspex.Controls/ContextMenu.cs | 21 +++++++++++++++++---- src/Perspex.Themes.Default/ContextMenu.paml | 2 ++ 2 files changed, 19 insertions(+), 4 deletions(-) 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 @@ + +