在出现验证错误并且许多自定义文本框一个接一个放置时,如何保持自定义文本框的焦点

问题描述

我试图将自定义文本框的焦点放在验证错误上,当它们彼此相邻放置时。我在wpf中制作了一个CustomTextBox(继承自TextBox)。

我必须在主xaml文件一个一个地保留两个customTextBox

我该怎么办?

现在,在将选项卡或鼠标单击移至其他任何其他控件或下一个放置的CustomTextBox之外时,它必须显示验证错误,并且如果第一个出现错误,则不应失去焦点。

问题出在哪里?

当我按下一个选项卡时,它将调用LostKeyboardFocus事件2次。第一次是第一个CustomTextBox,然后是下一次放置下一个CustomTextBox(我认为按Tab即可)。我在这自定义文本框的LostKeyboardFocus上触发了文本框绑定,然后检查是否已发生验证错误。然后我弹出同样有效的错误消息

问题,我必须将注意力集中在验证错误时,第一个CustomTextBox上,而下一个放置的CustomTextBox再次调用它。

我的代码在这里(仅相关部分):

 public class CustomTextBox : TextBox
    {

       public CustomTextBox()
        {
           this.LostKeyboardFocus += CustomTextBox_LostKeyboardFocus;
        }
      
       private void CustomTextBox_LostKeyboardFocus(object sender,KeyboardFocusChangedEventArgs e)
        {
            this.Text = updatedText;
            BindingExpression be = this.GetBindingExpression(TextBox.TextProperty);
            if (be == null)
            {
                return;
            }
            be.UpdateSource(); //triggers binding correctly
            if (Validation.GetHasError(this))
            {
                e.Handled = true;
                var errors = Validation.GetErrors(this);// gets validation error
                MainLibrary.ShowErrors(errors[0].Exception); //Popups error window
                Keyboard.Focus(this);
                this.CaretIndex = this.Text.Length;
                return;
            }
        }
    }

当出现验证错误时,如何使第二个CustomTextBox不会调用此CustomTextBox_LostKeyboardFocus?

解决方法

显示新窗口时,它将激活。

这意味着需要关注。

由于只有一件事可以具有焦点,因此您拥有的其他任何事物都会失去焦点。

在单独的新窗口中显示错误不是一个好主意。

您可以通过设置showactivated false来缓解这种情况

<Window ...
     ShowActivated="False">

除了用户可以单击之外。

或者,为此,他们可以单击其他控件,而不是远离自定义文本框。

这取决于保持焦点可能不是一个好主意。

您可能会更好地强制仅输入有效数据而不是进行验证。如果这对您所做的一切都是可行的。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...