mirror of
https://gitcode.com/gh_mirrors/ope/OpenFace.git
synced 2025-12-30 04:52:29 +00:00
52 lines
1.4 KiB
C#
52 lines
1.4 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Interactivity;
|
|
|
|
namespace OpenFaceOffline
|
|
{
|
|
public class ExclusiveMenuItemBehavior : Behavior<MenuItem>
|
|
{
|
|
protected override void OnAttached()
|
|
{
|
|
base.OnAttached();
|
|
|
|
GetCheckableSubMenuItems(AssociatedObject)
|
|
.ToList()
|
|
.ForEach(item => item.Click += OnClick);
|
|
}
|
|
|
|
protected override void OnDetaching()
|
|
{
|
|
base.OnDetaching();
|
|
|
|
GetCheckableSubMenuItems(AssociatedObject)
|
|
.ToList()
|
|
.ForEach(item => item.Click -= OnClick);
|
|
}
|
|
|
|
private static IEnumerable<MenuItem> GetCheckableSubMenuItems(ItemsControl menuItem)
|
|
{
|
|
var itemCollection = menuItem.Items;
|
|
return itemCollection.OfType<MenuItem>().Where(menuItemCandidate => menuItemCandidate.IsCheckable);
|
|
}
|
|
|
|
private void OnClick(object sender, RoutedEventArgs routedEventArgs)
|
|
{
|
|
var menuItem = (MenuItem)sender;
|
|
|
|
if (!menuItem.IsChecked)
|
|
{
|
|
menuItem.IsChecked = true;
|
|
return;
|
|
}
|
|
|
|
GetCheckableSubMenuItems(AssociatedObject)
|
|
.Where(item => item != menuItem)
|
|
.ToList()
|
|
.ForEach(item => item.IsChecked = false);
|
|
}
|
|
}
|
|
}
|