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>
/// 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();
}

Loading…
Cancel
Save