From c33c5bc6278576b90b6fae6ef07080a41028279b Mon Sep 17 00:00:00 2001 From: danwalmsley Date: Thu, 4 Feb 2016 16:47:15 +0000 Subject: [PATCH] migrating from popup root to popup. --- src/Perspex.Controls/ContextMenu.cs | 40 +++++++++++++++++------------ 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/src/Perspex.Controls/ContextMenu.cs b/src/Perspex.Controls/ContextMenu.cs index 1b31ff92fb..992e7a2c12 100644 --- a/src/Perspex.Controls/ContextMenu.cs +++ b/src/Perspex.Controls/ContextMenu.cs @@ -14,7 +14,7 @@ /// /// The popup window used to display the active context menu. /// - private static PopupRoot s_popup; + private static Popup _popup; /// /// Initializes static members of the class. @@ -23,7 +23,7 @@ { ContextMenuProperty.Changed.Subscribe(ContextMenuChanged); - MenuItem.ClickEvent.AddClassHandler(x => x.OnContextMenuClick); + MenuItem.ClickEvent.AddClassHandler(x => x.OnContextMenuClick); } /// @@ -66,9 +66,9 @@ i.IsSubMenuOpen = false; } - if (s_popup != null && s_popup.IsVisible) + if (_popup != null && _popup.IsVisible) { - s_popup.Hide(); + _popup.Close(); } SelectedIndex = -1; @@ -84,24 +84,32 @@ { if (control != null) { - if (s_popup == null) + if(_popup == null) { - s_popup = new PopupRoot + _popup = new Popup() { - Content = new ContentControl(), + [Popup.PlacementTargetProperty] = control, + Child = new ContentControl(), }; - - ((ISetLogicalParent)s_popup).SetParent(control); } + + ((ISetLogicalParent)_popup).SetParent(control); + + _popup.Open(); + + control.ContextMenu._isOpen = true; + } + } - var cp = MouseDevice.Instance?.GetPosition(control); - var position = control.PointToScreen(cp ?? new Point(0, 0)); - ((ContentControl)s_popup.Content).Content = control.ContextMenu; - s_popup.Position = position; - s_popup.Show(); + private void PopupOpened(object sender, EventArgs e) + { + var selectedIndex = SelectedIndex; - control.ContextMenu._isOpen = true; + if (selectedIndex != -1) + { + var container = ItemContainerGenerator.ContainerFromIndex(selectedIndex); + container?.Focus(); } } @@ -111,7 +119,7 @@ if (e.MouseButton == MouseButton.Right) { - if(control.ContextMenu._isOpen) + if (control.ContextMenu._isOpen) { control.ContextMenu.Hide(); }