所以基本上,我有一堆用户可以填写的TextBox。我有一个按钮,我想要保持禁用状态,直到所有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");
}
应该触发TextInput时,MessageBox不会显示。作为一个实验,我尝试在PreviewTextInput上触发CheckTextBoxFilled(),然后它运行正常,这意味着无论出于何种原因,函数都没有被调用。我还有一个由PreviewTextInput触发的验证函数,它可以正常工作。起初我以为PreviewTextInput可能会以某种方式干扰TextInput,所以我从TextBox中取出了PreviewTextInput,但是还没有设法解决任何问题。对于为什么会发生这种情况我完全糊涂了,所以任何帮助都会受到赞赏。
答案 0 :(得分:15)
TextInput
事件的处理程序未被触发,因为TextBox
正在处理事件。您可以尝试使用TextChanged事件,因为实际上您只想知道在TextBox
添加或删除字符的时间。
答案 1 :(得分:7)
InitializeComponent();
textbox.AddHandler(TextBox.TextInputEvent,
new TextCompositionEventHandler(TextBox_TextInput_1),
true);
答案 2 :(得分:1)
使用&#34; PreviewTextInput&#34;相反,它会起作用。
答案 3 :(得分:0)
创建一个派生自TextBox的新类。在新类中重写OnTextInput方法。在TextBox获取之前,将调用OnTextInput方法。