Wenn Sie verwenden vermeiden wollen Code-behind, können Sie die oben genannte Antwort in ein Verhalten konvertieren, indem Erstellen einer Klasse (z DigitsOnlyBehavior), die eine AttachedProperty enthält. Wenn die angefügte Eigenschaft festgelegt ist, registrieren Sie den Handler, der in Ihrer Verhaltensklasse definiert und implementiert ist.
Ein kurzes Beispiel:
public static class MyBehavior
{
public static readonly DependencyProperty AllowOnlyDigitsProperty = DependencyProperty.RegisterAttached(
"AllowOnlyDigits", typeof(bool), typeof(MyBehavior), new PropertyMetadata(default(bool), OnAllowOnlyDigitsChanged));
private static void OnAllowOnlyDigitsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var textBox = d as TextBox;
if (textBox == null) return;
textBox.PreviewTextInput += PreviewTextBoxInput;
}
public static void SetAllowOnlyDigits(DependencyObject element, bool value)
{
element.SetValue(AllowOnlyDigitsProperty, value);
}
private static void PreviewTextBoxInput(object sender, TextCompositionEventArgs e)
{
var textbox = sender as TextBox;
if (!char.IsDigit(e.Text, e.Text.Length - 1))
e.Handled = true;
}
public static bool GetAllowOnlyDigits(DependencyObject element)
{
return (bool) element.GetValue(AllowOnlyDigitsProperty);
}
}
Wie Sie die PreviewTextBoxInput Funktion ist vor allem sehen, was die früheren Post vermuten lässt.
Sie können nun „anhängen“, dass das Verhalten in XAML wie folgt aus:
<TextBox local:MyBehavior.AllowOnlyDigits="True" />
Diese Lösung nicht vollständig abgeschlossen ist, da es nicht die Eigenschaft zu ändern unterstützt (es wird der Handler jedes Mal, wenn die Eigenschaft anhängen ändert, so nimmt es an, dass Sie es nur einmal über XAML setzen). Aber wenn Sie dieses Verhalten während der Laufzeit nicht ändern möchten, geht es Ihnen gut.
Sorry, sollte hinzugefügt haben, der Inhalt vor dem Fokus ist eine Zeichenfolge. –
Mögliches Duplikat von [Wie erhalte ich eine TextBox, die nur numerische Eingaben in WPF akzeptiert?] (Http://stackoverflow.com/questions/1268552/how-do-i-get-a-textbox-to-only-accept -numeric-input-in-wpf) –
Sie können versuchen, TextMode = "Number" in Ihr Textfeld-Steuerelement zu setzen. Sehen Sie, ob dieser für Sie arbeitet. Wenn nicht, müssen Sie einen Validator verwenden. – jmag