Browse Source

migrating from popup root to popup.

pull/405/head
danwalmsley 11 years ago
parent
commit
c33c5bc627
  1. 40
      src/Perspex.Controls/ContextMenu.cs

40
src/Perspex.Controls/ContextMenu.cs

@ -14,7 +14,7 @@
/// <summary> /// <summary>
/// The popup window used to display the active context menu. /// The popup window used to display the active context menu.
/// </summary> /// </summary>
private static PopupRoot s_popup; private static Popup _popup;
/// <summary> /// <summary>
/// Initializes static members of the <see cref="ContextMenu"/> class. /// Initializes static members of the <see cref="ContextMenu"/> class.
@ -23,7 +23,7 @@
{ {
ContextMenuProperty.Changed.Subscribe(ContextMenuChanged); ContextMenuProperty.Changed.Subscribe(ContextMenuChanged);
MenuItem.ClickEvent.AddClassHandler<ContextMenu>(x => x.OnContextMenuClick); MenuItem.ClickEvent.AddClassHandler<ContextMenu>(x => x.OnContextMenuClick);
} }
/// <summary> /// <summary>
@ -66,9 +66,9 @@
i.IsSubMenuOpen = false; i.IsSubMenuOpen = false;
} }
if (s_popup != null && s_popup.IsVisible) if (_popup != null && _popup.IsVisible)
{ {
s_popup.Hide(); _popup.Close();
} }
SelectedIndex = -1; SelectedIndex = -1;
@ -84,24 +84,32 @@
{ {
if (control != null) 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; private void PopupOpened(object sender, EventArgs e)
s_popup.Position = position; {
s_popup.Show(); 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 (e.MouseButton == MouseButton.Right)
{ {
if(control.ContextMenu._isOpen) if (control.ContextMenu._isOpen)
{ {
control.ContextMenu.Hide(); control.ContextMenu.Hide();
} }

Loading…
Cancel
Save