using System.Globalization; using System.Windows; using System.Windows.Input; namespace Developpez.Dotnet.Windows.Behaviors { /// /// Fournit des propriétés attachées pour la gestion des entrées utilisateur. /// public static class InputBehavior { /// /// Obtient la valeur de la propriété UseCultureDependantDecimal pour l'objet spécifié /// /// Objet pour lequel on veut obtenir la valeur de la propriété /// true si le point du pavé numérique est traité comme le séparateur décimal de la culture courante, sinon false. public static bool GetUseCultureDependantDecimal(DependencyObject obj) { return (bool)obj.GetValue(UseCultureDependantDecimalProperty); } /// /// Définit la valeur de la propriété UseCultureDependantDecimal pour l'objet spécifié /// /// Objet pour lequel on veut définir la valeur de la propriété /// true pour que le point du pavé numérique soit traité comme le séparateur décimal de la culture courante, sinon false. public static void SetUseCultureDependantDecimal(DependencyObject obj, bool value) { obj.SetValue(UseCultureDependantDecimalProperty, value); } /// /// Identifiant de la propriété attachée UseCultureDependantDecimal. /// public static readonly DependencyProperty UseCultureDependantDecimalProperty = DependencyProperty.RegisterAttached( "UseCultureDependantDecimal", typeof(bool), typeof(InputBehavior), new UIPropertyMetadata( false, UseCultureDependantDecimalChanged)); private static void UseCultureDependantDecimalChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) { var element = o as UIElement; if (element == null) return; var oldValue = (bool)e.OldValue; var newValue = (bool)e.NewValue; if (oldValue && !newValue) { element.KeyDown -= element_KeyDown; } else if (newValue && !oldValue) { element.KeyDown += element_KeyDown; } } private static void element_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Decimal) { e.Handled = true; string separator = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator; var composition = new TextComposition(InputManager.Current, (IInputElement)e.OriginalSource, separator); TextCompositionManager.StartComposition(composition); } } } }