В моем приложении WPF у меня есть элемент управления текстовым полем. Элемент управления текстовым полем находится в UserControl, который, в свою очередь, имеет класс View Model. В моем классе VM у меня есть команда, которая запускается либо при нажатии кнопки в UserControl, либо при нажатии клавиши Enter. Моя проблема в том, что когда я нажимаю Enter, текстовое поле теряет фокус, и я должен щелкнуть по текстовому полю, чтобы снова сфокусировать его. Что я могу сделать, чтобы текстовое поле сохраняло фокус при нажатии клавиши?TextBox теряет фокус на команде клавиш
Я стараюсь сделать набросок того, что я использую сейчас:
<Window>
<uc:DesignPanel ... />
<uc:CommandPrompt ... />
</Window>
<UserControl Name=CommandPrompt ...>
<StackPanel>
<TextBox Name="tb_commands" />
<Button Name="btn_process" FocusManager.FocusedElement="{Binding ElementName=tb_commands}" />
</StackPanel>
</UserControl>
управления пользователь Designpanel в свою очередь, содержит другие пользовательские элементы управления (UCOperands). UCOperand в основном выглядит следующим образом:
<UserControl Name="UCOperand" Focusable="true">
<UserControl.InputBindings ... />
</UserControl>
Отметим здесь, что я поставил Focusable = «истина» на UCOperand, это необходимо, потому что в противном случае пользователь не может ссылаться на входные команды, определенные на этом Contrl. Если я удалю это свойство или настрою его на false, то все будет работать так, как я ожидаю, например. когда я нажимаю Enter, когда я редактирую текстовое поле «tb_commands» или нажимаю кнопку «btn_process», фокус сохраняется в текстовом поле. Но, как и сейчас, всякий раз, когда вы нажимаете Enter или нажимаете кнопку, tb_commands теряет фокус.
Заранее спасибо.
Проблема заключается в том, что при нажатии клавиши Enter вызывается команда, которая, в свою очередь, добавляет новый UserControl к моей DesignPanel. Событие KeyDown не обрабатывается в коде позади, и хотя я пытался это сделать, он просто не работает, потому что я полагаю, пользовательский элемент управления UCOperand получает фокус после того, как я могу вызвать tb_commands.Focus(), поэтому этот вызов бесполезно в моем случае. – Zoliqa