Если вы хотите, чтобы оно работало только с несколькими текстовыми полями, Лучше всего ответ Джея .
Если вы хотите, чтобы все ваше приложение работало таким образом, makwana.a ответ лучше, но его можно улучшить.
Ниже приведена моя модификация ответа makwana.a , которую я использовал во многих приложениях.Он также включает поддержку перехода к следующему элементу управления с помощью клавиши ввода, если активным элементом управления является флажок.Вместо того чтобы использовать свойство тега, чтобы решить, должен ли фокус перемещаться, я использовал свойство AcceptsReturn
текстового поля.Я сделал это, потому что по умолчанию установлено значение false и будет установлено значение true только в многострочных текстовых полях.В этом случае вы все равно не захотите, чтобы фокус переместился на следующий элемент управления при вводе.
Объявите эти обработчики событий в OnStartup void of App.xaml
EventManager.RegisterClassHandler(typeof(TextBox), TextBox.KeyDownEvent, new KeyEventHandler(TextBox_KeyDown));
EventManager.RegisterClassHandler(typeof(CheckBox), CheckBox.KeyDownEvent, new KeyEventHandler(CheckBox_KeyDown));
Вотостальные методы, необходимые для того, чтобы заставить его работать во всем приложении.
void TextBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter & (sender as TextBox).AcceptsReturn == false) MoveToNextUIElement(e);
}
void CheckBox_KeyDown(object sender, KeyEventArgs e)
{
MoveToNextUIElement(e);
//Sucessfully moved on and marked key as handled.
//Toggle check box since the key was handled and
//the checkbox will never receive it.
if (e.Handled == true)
{
CheckBox cb = (CheckBox)sender;
cb.IsChecked = !cb.IsChecked;
}
}
void MoveToNextUIElement(KeyEventArgs e)
{
// Creating a FocusNavigationDirection object and setting it to a
// local field that contains the direction selected.
FocusNavigationDirection focusDirection = FocusNavigationDirection.Next;
// MoveFocus takes a TraveralReqest as its argument.
TraversalRequest request = new TraversalRequest(focusDirection);
// Gets the element with keyboard focus.
UIElement elementWithFocus = Keyboard.FocusedElement as UIElement;
// Change keyboard focus.
if (elementWithFocus != null)
{
if (elementWithFocus.MoveFocus(request)) e.Handled = true;
}
}
Редактировать
Я обновил код, чтобы пометить нажатие клавиши как обработанное, если перемещение было успешныма также переключить флажок, поскольку ключ был обработан и больше не достигнет его.