فهرست منبع

migrating from popup root to popup.

danwalmsley 9 سال پیش
والد
کامیت
c33c5bc627
1فایلهای تغییر یافته به همراه24 افزوده شده و 16 حذف شده
  1. 24 16
      src/Perspex.Controls/ContextMenu.cs

+ 24 - 16
src/Perspex.Controls/ContextMenu.cs

@@ -14,7 +14,7 @@
         /// <summary>
         /// The popup window used to display the active context menu.
         /// </summary>
-        private static PopupRoot s_popup;
+        private static Popup _popup;
 
         /// <summary>
         /// Initializes static members of the <see cref="ContextMenu"/> class.
@@ -23,7 +23,7 @@
         {
             ContextMenuProperty.Changed.Subscribe(ContextMenuChanged);
 
-            MenuItem.ClickEvent.AddClassHandler<ContextMenu>(x => x.OnContextMenuClick);
+            MenuItem.ClickEvent.AddClassHandler<ContextMenu>(x => x.OnContextMenuClick);            
         }
 
         /// <summary>
@@ -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();
                 }