Как я могу вернуть фокус на элемент управления в WPF из потерянного фокусного события одного и того же элемента управления?

74
6

В моем приложении WPF я выполняю некоторую проверку ввода в событии lostfocus элемента управления textbox. Если текст не соответствует правильным критериям, я очищаю текст в textbox. Это прекрасно работает. У меня возникают проблемы с возвратом фокуса в элемент управления после просмотра окна сообщения. Например, когда я использую приведенный ниже код, метод фокуса текстового поля повторно запускает потерянное фокусное событие после закрытия окна сообщения.


 private void TaskNameBox_LostFocus(object sender, RoutedEventArgs e)

{

... validation logic here

MessageBox.Show("Message.", "Error", MessageBoxButton.OK);
TaskNameBox.Focus();
}


Я не знаю, почему метод Focus перезапустил потерянное фокусное событие, но мне нужен способ вернуть фокус обратно в элемент управления TaskNameBox после его потери. Любые предложения были бы очень оценены. Я новичок в WPF.

спросил(а) 2015-05-26T22:03:00+03:00 5 лет назад
1
Решение
91

Используйте его:

private void TaskNameBox_LostFocus(object sender, RoutedEventArgs e)

{

... validation logic here

MessageBox.Show("Message.", "Error", MessageBoxButton.OK);

Dispatcher.BeginInvoke((ThreadStart)delegate
{
TaskNameBox.Focus();
});
}

ответил(а) 2015-05-26T22:13:00+03:00 5 лет назад
38

попробуйте этот
FocusManager.SetFocusedElement


https://msdn.microsoft.com/en-us/library/system.windows.input.focusmanager.setfocusedelement(v=vs.110).aspx

FocusManager.SetFocusedElement(parentElement, txtCompanyID)

ответил(а) 2015-05-26T22:12:00+03:00 5 лет назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема