WPF TextBox. Фокус () раздражение

Вы не можете перезаписать "это". Это указывает на текущий экземпляр объекта.

7
задан Dave Clemmer 8 August 2011 в 15:58
поделиться

1 ответ

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

Простым обходным путем было бы отправить отдельное сообщение которое обрабатывается после текущего сообщения:

if (day < 0 || day > 31)
{
    MessageBox.Show("Please enter a correct day.");
    b.Text = string.Empty;

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

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

Что касается того, как вы Если бы вы могли решить эту проблему гораздо лучше, вы могли бы:

  1. Определите модель представления со свойствами для дня, месяца и года (предварительное условие: прочтите о шаблоне MVVM)
  2. Реализуйте IDataErrorInfo в модели представления
  3. Свяжите TextBox es в пользовательском интерфейсе для соответствующих свойств в модели представления (предварительное условие: прочтите о привязке данных WPF)
14
ответ дан 6 December 2019 в 15:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: