Mesen2/UI/Controls/MesenMenu.cs
2023-07-08 14:14:31 +09:00

57 lines
1.4 KiB
C#

using Avalonia;
using Avalonia.Controls;
using System;
using System.Linq;
using Avalonia.Styling;
using Avalonia.Interactivity;
using Mesen.Debugger.Utilities;
using System.Collections;
namespace Mesen.Controls
{
public class MesenMenu : Menu
{
protected override Type StyleKeyOverride => typeof(Menu);
private void SubmenuOpened(object? sender, RoutedEventArgs e) {
MenuItem menuItem = (MenuItem)sender!;
IEnumerable? source = menuItem.ItemsSource ?? menuItem.Items;
if(source != null) {
foreach(object subItemAction in source) {
if(menuItem.ContainerFromItem(subItemAction) is MenuItem subMenuItem) {
subMenuItem.SubmenuOpened -= SubmenuOpened;
subMenuItem.SubmenuOpened += SubmenuOpened;
}
if(subItemAction is BaseMenuAction action) {
action.Update();
}
}
}
}
protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
{
base.OnAttachedToVisualTree(e);
if(Items != null) {
foreach(object item in ItemsSource ?? Items) {
if(item is MenuItem menuItem) {
menuItem.SubmenuOpened += SubmenuOpened;
}
}
}
}
protected override void OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs e)
{
base.OnDetachedFromVisualTree(e);
if(Items != null) {
foreach(object item in ItemsSource ?? Items) {
if(item is MenuItem menuItem) {
menuItem.SubmenuOpened -= SubmenuOpened;
}
}
}
}
}
}