mirror of
https://github.com/SourMesen/Mesen2.git
synced 2025-04-02 10:21:44 -04:00
57 lines
1.4 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|