C# LostFocus方法多次发射
我有一个C# LostFocus方法多次发射,c#,wpf,xaml,C#,Wpf,Xaml,我有一个MaskedTextBox,我想在程序失去焦点时验证它。我的方法的工作原理是,除了一个问题之外,事件会一次又一次地触发,而不是仅仅触发一次(当用户输入无效日期时) 这就是我正在使用的方法 private void onDateTextBox_LostFocus(object sender, RoutedEventArgs e) { TextBox _dateTexBox = sender as TextBox; if (!_dateTexBox.IsKeyboardFoc
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
检查,但事件仍会多次触发。如何确保事件只触发一次?如中所述
LostFocus是路由策略设置为Bubble的路由事件。通过
气泡它意味着它将一直气泡到它的父窗口,直到根窗口
通过显式设置e.handled=true;在某处处理
所以,这意味着,即使孩子控制的焦点不集中,它也会冒泡
对于你的日期选择器,这就是为什么你看到你的方法多次点击
希望这对您有所帮助。如中所述
LostFocus是路由策略设置为Bubble的路由事件。通过
气泡它意味着它将一直气泡到它的父窗口,直到根窗口
通过显式设置e.handled=true;在某处处理
所以,这意味着,即使孩子控制的焦点不集中,它也会冒泡
对于你的日期选择器,这就是为什么你看到你的方法多次点击
希望这对您有所帮助。嗨,米克,谢谢您抽出时间。如果我读得正确,那么将
e.Handled=true
添加到LostFocus
事件不会阻止事件冒泡,我已经尝试了该答案中建议的方法(IsKeyboardFocusWithin
)。你能再解释一下吗?嗨,米克,谢谢你抽出时间。如果我读得正确,那么将e.Handled=true
添加到LostFocus
事件不会阻止事件冒泡,我已经尝试了该答案中建议的方法(IsKeyboardFocusWithin
)。你能再解释一下吗?