fix: context menu did NOT closed after its placement target being recycled (#140)

This commit is contained in:
leo 2024-05-23 21:24:22 +08:00
parent e9208ef112
commit 0dea7ed0e2
11 changed files with 54 additions and 38 deletions

View file

@ -0,0 +1,25 @@
using System;
using System.ComponentModel;
using Avalonia.Controls;
namespace SourceGit.Views
{
public static class ContextMenuExtension
{
public static void OpenContextMenu(this Control control, ContextMenu menu)
{
menu.PlacementTarget = control;
menu.Closing += OnContextMenuClosing; // Clear context menu because it is dynamic.
control.ContextMenu = menu;
control.ContextMenu.Open();
}
private static void OnContextMenuClosing(object sender, CancelEventArgs e)
{
if (sender is ContextMenu menu && menu.PlacementTarget != null)
menu.PlacementTarget.ContextMenu = null;
}
}
}