当它们彼此相邻放置时,我试图将自定义文本框的焦点设置在验证错误上。我CustomTextBox
在 wpf 中做了一个(从 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?