Отмена события изменения текстового поля WPF

Я изучаю WPF из разработки WinForms.

У меня есть событие TextChanged, назначенное одному из моих TextBox в моем приложении WPF. Если пользователь вводит недопустимые данные, я хочу иметь возможность вернуться к предыдущему текстовому значению.

В день старых форм я бы заменил NewValue на OldValue, но похоже, что WPF работает иначе.

Есть идеи о том, что я могу сделать для этого? Я просто еще не думаю о WPF?

Спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
24 864
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете сделать это двумя способами:

  1. Прослушайте событие PreviewTextInput и установите e.Handled = true, чтобы остановить событие TextChanged.

  2. Используйте проверку WPF. Есть отличный пост Пола Стовелла на Codeproject и недавний пост в его блоге.

Эти статьи помогут вам начать работу. одна вещь, с которой я застрял, когда я впервые проводил проверку, - это то, что правило проверки выполняется только тогда, когда привязка обновляет источник.

Его PreviewTextInput не PreviewTextChanged!

GuruC 05.07.2011 15:14

PreviewTextInput не срабатывает, если пользователь вставляет текст в текстовое поле.

Abhi 10.04.2012 12:33

Это не сработает для вставки в TextBox, поскольку свойство Text установлено напрямую; если вы хотите предотвратить такие события, вам может потребоваться добавить обработчик для ApplicationCommands.Paste.

Dennis 10.04.2012 12:44

Я бы использовал PreviewTextInput, у большинства событий в WPF есть родственник Preview. Если вы установите e.Handled = true, это остановит событие от буббелига / туннелирования.

Я не уверен, знаете ли вы об этом, но события предварительного просмотра, как говорят, туннелируются, т.е. они начинаются с внешнего контейнера и размещаются в каждом контейнере до тех пор, пока не достигнут элемента управления, имеющего фокус. События без предварительного просмотра называются всплывающими, т.е. они начинаются с элемента управления с фокусом и отправляются в каждый родительский элемент управления.

Если вы установите e.Handled = true в событии PreviewTextChanged самой внешней сетки, вы также отмените все другие события, включая TextChanged. Сначала все события предварительного просмотра запускаются от самого внешнего к элементу управления с фокусом, затем все события без предварительного просмотра запускаются из элемента управления с фокусом и выходят на внешний родительский элемент управления.

Где PreviewTextChanged? Я могу найти только PreviewTextInput и TextChanged

Shuo 12.07.2010 23:50

Я не уверен, было ли оно переименовано или я ошибся в первом случае, но правильное событие - PreviewTextInput.

sindre j 13.07.2010 16:19

Отредактировал исходный ответ для состояния PreviewTextInput, НЕ PreviewTextChanged

sindre j 13.07.2010 16:21

Я сомневаюсь, что это можно было изменить в WPF, возможно, мы оба думали о событии WinForms. Мне просто нужно было обновить свой ответ на PreviewTextChanged.

Dennis 05.07.2011 16:51

Другие вопросы по теме