LostFocus方法多次触发
本文关键字:方法 LostFocus | 更新日期: 2023-09-27 18:17:54
我有一个MaskedTextBox
,我想在程序失去对它的关注时验证它。我的方法的工作方式,我想撇开一个问题,事件触发一次又一次,而不是只有一次(当用户输入一个无效的日期)。
这是我使用的方法;
private void onDateTextBox_LostFocus(object sender, RoutedEventArgs e)
{
TextBox _dateTexBox = sender as TextBox;
if (!_dateTexBox.IsKeyboardFocusWithin)
{
if (Convert.ToInt32(dateTextBox.Text.Substring(0, 2)) > 31)
{
MessageBox.Show("Invalid day.");
dateTextBox.Focus();
}
if (Convert.ToInt32(dateTextBox.Text.Substring(3, 2)) > 12)
{
MessageBox.Show("Invalid month.");
dateTextBox.Focus();
}
if (Convert.ToInt32(dateTextBox.Text.Substring(6, 4)) > 2100)
{
MessageBox.Show("Invalid year.");
dateTextBox.Focus();
}
}
}
我输入了IsKeyboardFocusWithin
检查,但是事件仍然多次触发。如何确保事件只触发一次?
如WPF DatePicker中所述,LostFocus触发七次
LostFocus是一个路由策略设置为Bubble的路由事件。通过冒泡它的意思是它会冒泡到它的父窗口直到根窗口e.Handled = true;
所以,这意味着即使子控件失去焦点,它也会冒出来到你的datePicker,这就是为什么你看到多个点击到你的方法。