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