Antwort auf Simbay Ansatz, der meiner Meinung nach abgewiesen wird.
Sie können in TextChanged nicht Rückgängig aufrufen, da die Rückgängig-Operation noch von der TextBox vorbereitet wird. Es scheint manchmal zu funktionieren und nicht zu anderen Zeiten, also deutet dies darauf hin, dass zwischen dem Zeitpunkt der Signalisierung des Ereignisses und dem Abschluss der Rückgängig-Vorbereitung eine Wettlaufsituation besteht.
Durch Aufrufen von Undo, das auf dem Dispatcher aufgerufen wird, kann das Textfeld jedoch die Vorbereitungsbearbeitung rückgängig machen. Sie können die Ergebnisse der Textänderung validieren und dann entscheiden, ob Sie die Änderung beibehalten oder rückgängig machen möchten. Dies ist vielleicht nicht der beste Ansatz, aber ich habe es versucht und eine Reihe von Textänderungen in die Textbox eingefügt und konnte die Ausnahme nicht reproduzieren. Die "akzeptierte Antwort" ist NUR dann hilfreich, wenn Sie verhindern wollen, dass ein ungültiges Zeichen eingegeben oder eingefügt wird, aber im Allgemeinen mache ich oft eine wesentlich umfangreichere Validierung der TextBox-Eingabe und möchte den endgültigen Textwert überprüfen. Es ist nicht einfach, den endgültigen Text eines Preview-Ereignisses zu erkennen, da bis jetzt noch nichts passiert ist.
Um Terribads Frage zu beantworten, ist simbay's Antwort in mehr Situationen besser und prägnanter.
Ich habe viele wilde Abenteuer in Textbox-Validierung gelesen und das ist ungefähr so einfach wie ich gefunden habe.
Sie sollten stattdessen Verhaltensweisen verwenden. – SepehrM
SepehrM - könnten Sie ein Beispiel geben? Was ist, wenn Sie noch nicht validieren wollen, aber diese verdammte Ausnahmebotschaft einfach davon abhalten wollen, Ihre Sitzung in die Luft zu jagen? Ich bekomme das, wenn ein Benutzer ein kleines Bit zu schnell eingibt oder ein Stück Daten in das Feld einfügt. Nicht einmal bestätigen. – Allen