using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
namespace Developpez.Dotnet.Windows.Behaviors
{
///
/// Fournit des propriétés attachées pour ajouter des fonctionnalités aux menus
///
public static class MenuBehavior
{
///
/// Obtient la valeur de la propriété attachée OptionGroupName
///
/// L'objet pour lequel on veut obtenir la valeur
/// Le nom du groupe d'options auquel appartient cet élément
[AttachedPropertyBrowsableForType(typeof(MenuItem))]
public static string GetOptionGroupName(MenuItem obj)
{
return (string)obj.GetValue(OptionGroupNameProperty);
}
///
/// Définit la valeur de la propriété attachée OptionGroupName
///
/// L'objet pour lequel on veut définir la valeur
/// Le nom du groupe d'options auquel appartient cet élément
public static void SetOptionGroupName(MenuItem obj, string value)
{
obj.SetValue(OptionGroupNameProperty, value);
}
///
/// Identifiant de la propriété OptionGroupName
///
public static readonly DependencyProperty OptionGroupNameProperty =
DependencyProperty.RegisterAttached(
"OptionGroupName",
typeof(string),
typeof(MenuBehavior),
new UIPropertyMetadata(
null,
OptionGroupNameChanged));
private static void OptionGroupNameChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
var menuItem = o as MenuItem;
if (menuItem == null)
return;
var oldValue = (string)e.OldValue;
var newValue = (string)e.NewValue;
if (!string.IsNullOrEmpty(oldValue))
{
RemoveFromOptionGroup(menuItem);
}
if (!string.IsNullOrEmpty(newValue))
{
AddToOptionGroup(menuItem);
}
}
private static Dictionary> GetOptionGroups(DependencyObject obj)
{
return (Dictionary>)obj.GetValue(OptionGroupsPropertyKey.DependencyProperty);
}
private static void SetOptionGroups(DependencyObject obj, Dictionary> value)
{
obj.SetValue(OptionGroupsPropertyKey, value);
}
private static readonly DependencyPropertyKey OptionGroupsPropertyKey =
DependencyProperty.RegisterAttachedReadOnly("OptionGroups", typeof(Dictionary>), typeof(MenuBehavior), new UIPropertyMetadata(null));
private static HashSet