using System.Windows; namespace Developpez.Dotnet.Windows.Behaviors { /// /// Fournit des propriétés attachées permettant de contrôler le focus /// public static class FocusBehavior { #region FocusOnLoad /// /// Obtient la valeur de la propriété FocusOnLoad pour l'objet spécifié /// /// Objet pour lequel on veut obtenir la valeur de la propriété /// true si l'élément prend le focus lors de son chargement, sinon false. [AttachedPropertyBrowsableForType(typeof(FrameworkElement))] public static bool GetFocusOnLoad(FrameworkElement obj) { return (bool)obj.GetValue(FocusOnLoadProperty); } /// /// Définit la valeur de la propriété FocusOnLoad pour l'objet spécifié /// /// Objet pour lequel on veut définir la valeur de la propriété /// true pour que l'élément prenne le focus lors de son chargement, sinon false public static void SetFocusOnLoad(FrameworkElement obj, bool value) { obj.SetValue(FocusOnLoadProperty, value); } /// /// Identifiant de la propriété FocusOnLoad /// public static readonly DependencyProperty FocusOnLoadProperty = DependencyProperty.RegisterAttached( "FocusOnLoad", typeof(bool), typeof(FocusBehavior), new UIPropertyMetadata( false, FocusOnLoadChanged)); private static void FocusOnLoadChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) { FrameworkElement element = o as FrameworkElement; if (element == null) return; bool oldValue = (bool)e.OldValue; bool newValue = (bool)e.NewValue; if (oldValue && !newValue) { if (!element.IsLoaded) element.Loaded -= element_Loaded; } else if (newValue && !oldValue) { if (!element.IsLoaded) element.Loaded += element_Loaded; else element.Focus(); } } static void element_Loaded(object sender, RoutedEventArgs e) { FrameworkElement element = sender as FrameworkElement; if (element == null) return; element.Loaded -= element_Loaded; element.Focus(); } #endregion } }