Все это было вызвано нажатием кнопки табуляции.
Если оно не было нажато, элемент управления оставался сфокусированным, как и должно - и это вводило в заблуждение.
Когда я нажимал клавишу Tab, затемпо умолчанию, элемент управления next получил фокус, то есть я обработал событие, но оно было передано дальше содержащему элемент управления, который установил фокус на другом элементе управления.Таким образом, неожиданное поведение.
Решение было установить e.Handled
вместо использования метода Focus()
(после которого дальнейшая обработка события в любом случае фокусировалась на другом элементе управления), равным true
в событии,поэтому нажатие на вкладку больше не обрабатывается.
Пример кода:
private void txbUid_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key != Key.Tab) return; // here control doesn't loose focus
string stringUid = txbUid.Text;
long uid;
if (!TryParseUid(stringUid, out uid))
{
// no need to comment out anything
string errMsg = $"Niepoprawny kod UID: {stringUid}";
lblError.Text = errMsg;
this.LogError(errMsg);
txbUid.Text = "";
// mark event as handled
e.Handled = true;
return;
}
}