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
}
}