微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我试图将自定义文本框的焦点放在验证错误上,当它们彼此相邻放置时。我在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">

除了用户可以单击之外。

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?