|
|
|
@ -7,6 +7,7 @@ using Avalonia.Controls.Platform; |
|
|
|
using Avalonia.Controls.Primitives; |
|
|
|
using Avalonia.Controls.Templates; |
|
|
|
using Avalonia.Input; |
|
|
|
using Avalonia.Interactivity; |
|
|
|
using Avalonia.LogicalTree; |
|
|
|
|
|
|
|
namespace Avalonia.Controls |
|
|
|
@ -90,9 +91,14 @@ namespace Avalonia.Controls |
|
|
|
/// <param name="control">The control.</param>
|
|
|
|
public void Open(Control control) |
|
|
|
{ |
|
|
|
if (IsOpen) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if (_popup == null) |
|
|
|
{ |
|
|
|
_popup = new Popup() |
|
|
|
_popup = new Popup |
|
|
|
{ |
|
|
|
PlacementMode = PlacementMode.Pointer, |
|
|
|
PlacementTarget = control, |
|
|
|
@ -107,7 +113,14 @@ namespace Avalonia.Controls |
|
|
|
((ISetLogicalParent)_popup).SetParent(control); |
|
|
|
_popup.Child = this; |
|
|
|
_popup.IsOpen = true; |
|
|
|
|
|
|
|
IsOpen = true; |
|
|
|
|
|
|
|
RaiseEvent(new RoutedEventArgs |
|
|
|
{ |
|
|
|
RoutedEvent = MenuOpenedEvent, |
|
|
|
Source = this, |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
@ -115,13 +128,15 @@ namespace Avalonia.Controls |
|
|
|
/// </summary>
|
|
|
|
public override void Close() |
|
|
|
{ |
|
|
|
if (!IsOpen) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if (_popup != null && _popup.IsVisible) |
|
|
|
{ |
|
|
|
_popup.IsOpen = false; |
|
|
|
} |
|
|
|
|
|
|
|
SelectedIndex = -1; |
|
|
|
IsOpen = false; |
|
|
|
} |
|
|
|
|
|
|
|
protected override IItemContainerGenerator CreateItemContainerGenerator() |
|
|
|
@ -129,6 +144,18 @@ namespace Avalonia.Controls |
|
|
|
return new MenuItemContainerGenerator(this); |
|
|
|
} |
|
|
|
|
|
|
|
private void CloseCore() |
|
|
|
{ |
|
|
|
SelectedIndex = -1; |
|
|
|
IsOpen = false; |
|
|
|
|
|
|
|
RaiseEvent(new RoutedEventArgs |
|
|
|
{ |
|
|
|
RoutedEvent = MenuClosedEvent, |
|
|
|
Source = this, |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
private void PopupOpened(object sender, EventArgs e) |
|
|
|
{ |
|
|
|
Focus(); |
|
|
|
@ -145,8 +172,7 @@ namespace Avalonia.Controls |
|
|
|
i.IsSubMenuOpen = false; |
|
|
|
} |
|
|
|
|
|
|
|
contextMenu.IsOpen = false; |
|
|
|
contextMenu.SelectedIndex = -1; |
|
|
|
contextMenu.CloseCore(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|