Interpretar entrar como pestaña WPF
keyboard-input (4)
Para cambiarlo en todo el proyecto necesitas hacer esto.
En App.xaml.cs:
protected override void OnStartup(StartupEventArgs e) { EventManager.RegisterClassHandler(typeof(Grid), Grid.PreviewKeyDownEvent, new KeyEventHandler(Grid_PreviewKeyDown)); base.OnStartup(e); } private void Grid_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e) { var uie = e.OriginalSource as UIElement; if (e.Key == Key.Enter) { e.Handled = true; uie.MoveFocus( new TraversalRequest( FocusNavigationDirection.Next)); } }
Compilar. Y lo hizo. Ahora puedes usar enter como pestaña. Nota: Este trabajo para elementos en la cuadrícula.
Quiero interpretar la tecla Enter como la tecla Tab en toda mi aplicación WPF, es decir, en todas partes de mi aplicación cuando el usuario presione Enter. Quiero enfocar el siguiente control enfocable, excepto cuando el botón está enfocado. ¿Hay alguna manera de hacer eso en el círculo de vida de la aplicación? ¿Alguien puede darme un ejemplo?
¡Muchas gracias!
Puede usar mi código de propiedad adjunto EnterKeyTraversal si lo desea. Agréguelo al contenedor de nivel superior en una ventana de WPF y todo lo que esté dentro tratará la entrada como pestaña:
<StackPanel my:EnterKeyTraversal.IsEnabled="True">
...
</StackPanel>
Resolví el problema de woodyiii agregando un FrameworkElement.Tag (cuyo valor es IgnoreEnterKeyTraversal) a ciertos elementos (botones, cuadros combinados, o cualquier cosa que quiera ignorar el recorrido de la tecla enter) en mi XAML. Luego busqué esta etiqueta y valor en la propiedad adjunta. Al igual que:
if (e.Key == Key.Enter)
{
if (ue.Tag != null && ue.Tag.ToString() == "IgnoreEnterKeyTraversal")
{
//ignore
}
else
{
e.Handled = true;
ue.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}
}
woodyiii, hay una función en el UIElement
llamada PredictFocus()
que por su nombre conoce su función, luego puede verificar si ese elemento está habilitado o no para mover el foco hacia él o no ...