Fügen Sie das Ereignis in eine WPF-TextBox ein
Habe ich ein benutzerdefiniertes Steuerelement erstellt Erben TextBox
. Dieses benutzerdefinierte Steuerelement ist ein numerischer TextBox
nur Unterstützung zahlen.
Ich bin mit OnPreviewTextInput
überprüfen jedes neues Zeichen eingegeben wird, um zu sehen, wenn der Charakter ist eine gültige Eingabe. Dies funktioniert Super. Jedoch, wenn ich, fügen Sie den text in die TextBox
OnPreviewTextInput
wird nicht ausgelöst.
Was ist der beste Weg, zu erfassen eingefügten text in ein TextBox
?
Außerdem habe ich ein problem, wenn die back space gedrückt wird, kann ich nicht herausfinden, was dieses Ereignis ausgelöst wird. OnPreviewTextInput
ist nicht gefeuert!
Irgendwelche Ideen, wie capture text eingefügt und back space events in WPF TextBox
?
InformationsquelleAutor der Frage code-zoop | 2010-06-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier einige Codes die ich hatte herumliegen, falls ich jemals brauchte. Die Ihnen helfen könnten.
InformationsquelleAutor der Antwort Matt Hamilton
Sich die Mühe mit dem Versuch, abfangen und Falle alle einzelnen Ereignisse, die verursachen könnten ein Textfeld.Text-Eigenschaft zu ändern, ist, dass es viele solcher Veranstaltungen:
Versuchen zuverlässig zu fangen alle von Ihnen ist eine übung in Sinnlosigkeit. Eine viel bessere Lösung ist, um zu überwachen TextBox.TextChanged und ablehnen von änderungen, die Sie nicht mögen.
In diese Antwort ich zeigen, wie zu implementieren TextBoxRestriction Klasse für den bestimmten Szenario gefragt. Das gleiche Verfahren kann verallgemeinert werden für den Einsatz mit allen Einschränkungen, die Sie wollen, um Platz auf Ihrer TextBox-Steuerelement.
Beispielsweise in Ihrem Fall könnten Sie implemnt eine
RestrictValidChars
angefügte Eigenschaft ähnlich zu derRestrictDeleteTo
Eigenschaft im code. Es wäre das gleiche, außer dass die innere Schleife wäre zu überprüfen-Einsätze, nicht löscht. Es würde werden wie folgt verwendet:Dies ist nur eine Idee, wie es gehandhabt werden kann. Es gibt viele Möglichkeiten, um die Struktur der code je nachdem, was Sie wollen. Zum Beispiel könnten Sie ändern TextBoxRestriction zu nennen, Ihren eigenen code zu validieren, unter Verwendung einer angefügten Eigenschaft, die ein Delegierter oder ein Objekt mit einem event.
Siehe die andere Antwort für details auf, wie binden Sie die Text-Eigenschaft, wenn Sie mit dem TextBoxRestriction Klasse, so wird es nicht auslösen die Einschränkung, wenn Sie das nicht wollen.
InformationsquelleAutor der Antwort Ray Burns
Für backspace, überprüfen Sie bitte die PreviewKeyDown Veranstaltung
Für den Befehl "einfügen", fügen Sie eine command-Bindung an die ApplicationCommands.Paste, und legen Sie das argument behandelt, wenn Sie nicht wollen, etwas zu tun:
Und im code hinter:
InformationsquelleAutor der Antwort Arcturus
Können Sie erreichen dies mit
PreviewKeyDown
Ereignis undTextChanged
Veranstaltung.In
PreviewKeyDown
erfassen Sie die Einfügen-operationIn
TextChanged
VeranstaltungWo
IsNumber
Methode überprüft den eingegebenen text Zahl oder nichtInformationsquelleAutor der Antwort Syed