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