WPF: текстовое поле не запускает событие onTextInput

Итак, в основном у меня есть куча TextBox, которую пользователь получает, чтобы заполнить. У меня есть кнопка, которую я хочу отключить, пока все текстовые поля не будут введены в них. Вот пример XAML TextBox, который я использую:

<TextBox Name="DelayedRecallScore" TextInput="CheckTextBoxFilled" Width="24" />

И вот функция, которую я пытаюсь вызвать:

  //Disables the OK button until all score textboxes have content
    private void CheckTextBoxFilled(object sender, RoutedEventArgs e)
    {
        /*
        foreach (TextBox scorebox in TextBoxList)
        {
            if (string.IsNullOrEmpty(scorebox.Text))
            {
                Ok_Button.IsEnabled = false;
                return;
            }
        }
        Ok_Button.IsEnabled = true;
         */
        MessageBox.Show("THIS MAKES NO SENSE");
    }

MessageBox не появляется, когда TextInput запускается. В качестве эксперимента я попытался запустить CheckTextBoxFilled() в PreviewTextInput, и он отлично работал, что означает, что по какой-то причине функция просто не вызвана. У меня также есть функция проверки, которая запускается PreviewTextInput, которая работает так, как должна. Сначала я думал, что PreviewTextInput может каким-то образом вмешиваться в TextInput, поэтому я взял PreviewTextInput из TextBox, но это ничего не удалось исправить. Я полностью ошеломлен, почему это может произойти, поэтому любая помощь будет оценена по достоинству.

Ответ 1

Ваш обработчик для события TextInput не запускается, потому что TextBox обрабатывает событие. Вместо этого вы можете попробовать использовать TextChanged, так как на самом деле вы просто хотите знать, когда символы были добавлены или удалены из TextBox.

Ответ 2

InitializeComponent();
textbox.AddHandler(TextBox.TextInputEvent, 
                   new TextCompositionEventHandler(TextBox_TextInput_1), 
                   true);

Ответ 3

Создайте новый класс, полученный из TextBox. В новом классе переопределить метод OnTextInput. Ваш метод OnTextInput будет вызван до того, как TextBox получит его.

Ответ 4

Вместо этого используйте "PreviewTextInput", он будет работать.