Установить фокус на элемент - PullRequest
0 голосов
/ 22 марта 2012

Есть кнопка и текстовое поле.Я добавил событие «KeyDown» в текстовое поле, чтобы при нажатии «enter» нажималась кнопка.Хорошо, тогда я попытался снова сфокусироваться на текстовом поле, но не получилось.В приведенном ниже коде я пробовал три способа, но ни один из них не работает.

private void txt_addRemove_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Return)
    {               
        btn_BC_add.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));

        // 1.way
        // IInputElement focusedElement = FocusManager.GetFocusedElement(txt_addRemove);
        // 2.way
        // Keyboard.Focus(txt_addRemove);
        // 3.way
        // txt_addRemove.Focus();
    }
}

Ответы [ 3 ]

1 голос
/ 22 марта 2012

Добавить

if (!textBox1.Focus())
   {
       textBox1.Focus();
   }

Что это делает: 1. Проверяем, не сфокусировано ли текстовое поле. 2. Если он не сфокусирован, сфокусируйте элемент управления.

РЕДАКТИРОВАТЬ: Как насчет этого:

btn_BC_add.PerformClick()
0 голосов
/ 23 марта 2012

не могли бы вы также попробовать изменить фокус с помощью обработчика событий кнопки? это может быть нежелательно, если вы не хотите, чтобы фокус был на вашем текстовом поле после обычного нажатия кнопки, но это должно работать.

Я предполагаю, что при нажатии кнопки генерируется сообщение назад, прежде чем фокус может быть изменен

0 голосов
/ 22 марта 2012

Попробуйте сфокусировать текстовое поле после того, как обработчик событий закончится, используя:

Dispatcher.Invoke(() => { txt_addRemove.Focus(); })
...