如何在同一控件的丢失焦点事件中将焦点返回到WPF中的控件?

时间:2015-05-26 19:03:48

标签: wpf

在我的WPF应用程序中,我在lostfocus控件的textbox事件中进行了一些输入验证。如果文字不符合正确的标准,我会清除textbox中的文字。这很好。我遇到的麻烦是在查看消息框后将焦点返回到控件。例如,当我使用下面的代码时,文本框焦点方法会在关闭消息框后重新触发丢失的焦点事件。

 private void TaskNameBox_LostFocus(object sender, RoutedEventArgs e)

{

    ... validation logic here

    MessageBox.Show("Message.", "Error", MessageBoxButton.OK);            
    TaskNameBox.Focus();
 }

我不知道为什么Focus方法会重新触发丢失的焦点事件,但我需要一种方法来在失去它之后将焦点重新放回到TaskNameBox控件上。任何建议将非常感谢。我是WPF的新手。

2 个答案:

答案 0 :(得分:5)

使用以下内容:

private void TaskNameBox_LostFocus(object sender, RoutedEventArgs e)

{

    ... validation logic here

    MessageBox.Show("Message.", "Error", MessageBoxButton.OK); 

    Dispatcher.BeginInvoke((ThreadStart)delegate
            {
                TaskNameBox.Focus();
            });
 }

答案 1 :(得分:0)

试试这个 FocusManager.SetFocusedElement

https://msdn.microsoft.com/en-us/library/system.windows.input.focusmanager.setfocusedelement(v=vs.110).aspx

FocusManager.SetFocusedElement(parentElement, txtCompanyID)