WPF: возвращение фокуса на текстовое поле, рекурсивно вызывающее событие Lost focus.Как решить?

У меня есть форма WPF, в которой присутствует текстовое поле и метка. В событии «Потерянный фокус» текстового поля я выполняю некоторую проверку, и если проверка не удалась, я покажу сообщение об ошибке в метке и верну фокус обратно на текстовое окно. Проблема в том, что я снова сфокусировался на текстовых bos, событие «Lost_Focus» снова запущено и моя функция проверки вызывается рекурсивно, и я получаю исключение «StackOverflow»

  An unhandled exception of type 'System.StackOverflowException' occurred in 
  mscorlib.dll

Если я прокомментирую строку установки курсора / фокуса в текстовое поле, все работает хорошо. Но мне нужно, чтобы курсор находился в текстовом поле, если проверка не удалась.

Есть мысли, как от этого избавиться?


person Shyju    schedule 08.09.2010    source источник


Ответы (1)


Как насчет обработки TextBox.PreviewLostKeyboardFocus вместо этого? А в обработчике событий просто установите e.Handled = true, если проверка не удалась?

person ASanch    schedule 08.09.2010
comment
PreviewLostKeyboardFocus позаботится только о вводе с клавиатуры. Мое приложение будет использовать сканер штрих-кода для чтения значений в текстовом поле - person Shyju; 08.09.2010
comment
Я думаю, он должен работать так же, не так ли? Вы пробовали это? - person ASanch; 08.09.2010
comment
Я думаю, что обычное событие LostKeyboardFocus является лучшей альтернативой, чем PreviewLostKeyboardFocus, просто потому, что оно использует пузырьковую маршрутизацию, а не туннельную маршрутизацию. - person rookie1024; 11.06.2016