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



当一个自定义文本框并排放置时,我正试图将它们的焦点设置为验证错误。我在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_LostKeyboardFocus不被第二个放置的CustomTextBox调用?

当您显示一个新窗口时,它将被激活。

这意味着它需要聚焦。

因为只有一件事可以集中注意力,所以你拥有的任何其他东西都会失去注意力。

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

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

<Window ...
ShowActivated="False">

除非用户可以点击它。

或者,他们可以点击其他控件,而不是从自定义文本框中跳出来。

这意味着依靠保持专注可能不是一个好主意。

与其进行验证,不如只强制输入有效数据。如果这对你正在做的任何事情都实用的话。

最新更新