Невозможно установить фокус на TextBox в WPF - PullRequest
0 голосов
/ 09 октября 2018

Я не могу установить фокус на моем TextBox, у меня есть этот код:

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))
  {
    //string errMsg = $"Niepoprawny kod UID: {stringUid}";
    //lblError.Text = errMsg;
    //this.LogError(errMsg);
    //txbUid.Text = "";
    //txbUid.Focus();
    return; // here control looses focus
  }
}

Как вы можете видеть, я попытался закомментировать определенные строки, чтобы увидеть, является ли одна из них причиной проблемы.,Но ничего не сработало.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Символ Tab будет внутренне обрабатываться TextBox.Вы можете попробовать установить e.Handled = true перед возвратом.Если это не сработает, вам нужно вместо этого обработать PreviewKeyDown (и не забудьте установить свойство Handled).

0 голосов
/ 09 октября 2018

Все это было вызвано нажатием кнопки табуляции.

Если оно не было нажато, элемент управления оставался сфокусированным, как и должно - и это вводило в заблуждение.

Когда я нажимал клавишу 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;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...