如果验证失败,我希望Focus回到之前的Textbox。我正在验证lostFocus事件的Textbox控件值。需要一些帮助。
这个问题很有意思,链接是
答案 0 :(得分:1)
如果你试图将一个元素集中在它自己的LostFocus
处理程序中,你将面临一个StackOverflowException
,我不确定根本原因(我怀疑焦点类似于反弹)但是那里是一个简单的解决方法:发送它。
private void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
var element = (sender as TextBox);
if (!theTextBoxWasValidated())
{
// doing this would cause a StackOverflowException
// element.Focus();
var restoreFocus = (System.Threading.ThreadStart)delegate { element.Focus(); };
Dispatcher.BeginInvoke(restoreFocus);
}
}
通过Dispatcher.BeginInvoke
,您确保恢复焦点不会妨碍正在进行的焦点丢失(并避免您面临的令人讨厌的异常)