WPF : Factoriser les KeyBindings
Je voulais utiliser les mêmes KeyBindings pour différents contrôles d’un même UserControl.
Mon premier réflexe a donc été de me créer une InputBindingCollection dans les resources de mon UserControl.
Ensuite, j’ai voulu affecter ma InputBindingCollection à la propriété InputBindings de mes différents contrôles. Facile sauf que… la propriété InputBindings est en Read Only ce qui fait que mon code ne marche pas.
D’où l’idée de Simon : passer par une Attached Property.
Je me suis créer un contrôle InputBindingsContener dédié à cela :
public class InputBindingsContener : ContentControl
{
public static InputBindingCollection GetInputBindingsCollection(DependencyObject obj)
{
return (InputBindingCollection)obj.GetValue(InputBindingsProperty);
}
public static void SetInputBindingsCollection(DependencyObject obj, InputBindingCollection value)
{
obj.SetValue(InputBindingsProperty, value);
}
public static readonly DependencyProperty InputBindingsProperty =
DependencyProperty.RegisterAttached("InputBindingsCollection", typeof(InputBindingCollection), typeof(UIElement), new UIPropertyMetadata(null, (sender, e) => ((UIElement)sender).InputBindings.AddRange((InputBindingCollection)e.NewValue)));
}
Ensuite, il me suffit de placer mes contrôles dans InputBindingsContener pour pouvoir écrire :
<ListView ns:InputBindingsContener.InputBindingsCollection="{StaticResource ContextMenuKeyBindings}" />
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :