在WPF应用程序中按下Return键时如何模拟Tab键?

在WPF应用程序中,我有一个包含很多字段的窗口。 当用户在填充每个字段后使用TAB键时,Windows会理解它会移动到下一个字段。 这是非常了解的行为。

现在我想要的是,它使模拟TAB键,实际上RETURN被击中。 所以在我的WPF xaml中我添加了暗示KeyDown="userPressEnter"

在它背后的代码中:

 private void userPressEnter(object sender, KeyEventArgs e) { if (e.Key == Key.Return) { e.Key = Key.Tab // THIS IS NOT WORKING } } 

现在,显然这不起作用。 但我不知道的是,我如何使这项工作?


编辑1 ==>找到一个解决方案

我找到了帮助我的东西=)

 private void userPressEnter(object sender, KeyEventArgs e) { if (e.Key == Key.Return) { TraversalRequest request = new TraversalRequest(FocusNavigationDirection.Next); MoveFocus(request); } } 

这样,焦点移动到下一个它可以找到:)

你可以在这里看一篇文章: http : //social.msdn.microsoft.com/Forums/en/wpf/thread/c85892ca-08e3-40ca-ae9f-23396df6f3bd

这是一个例子:

 private void textBox1_PreviewKeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Enter) { TraversalRequest request = new TraversalRequest(FocusNavigationDirection.Next); request.Wrapped = true; ((TextBox)sender).MoveFocus(request); } } 
  protected override bool ProcessDialogKey(Keys keyData) { System.Diagnostics.Debug.WriteLine(keyData.ToString()); switch (keyData) { case Keys.Enter: SendKeys.Send("{TAB}"); break; } base.ProcessDialogKey(keyData); return false; } 

我认为你应该用它来模拟TAB:

 SendKeys.Send("{TAB}"); 

代替

 e.Key = Key.Tab 

来源: http : //msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.send.aspx

使用表单的SelectNextControl方法

SendKeys.Send或SendKeys.SendWait在WPF应用程序中不起作用,所以回答原始问题

 if (e.Key == Key.Return) { KeyEventArgs tabPressEventArgs = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.Tab) { RoutedEvent = Keyboard.KeyDownEvent }; InputManager.Current.ProcessInput(tabPressEventArgs); }