¿Por qué no solo utiliza este código en el controlador de comandos?
private void MyCommandHandler(){
// Do command's work here
TraversalRequest request = new TraversalRequest(FocusNavigationDirection.Next);
request.Wrapped = true;
control.MoveFocus(request);
}
Eso es básicamente lo que hace 'Tab', así que si haces lo mismo, ya estás listo. (Por supuesto invertir el sentido de si tiene un comando con Shift-Tab.
De hecho, me envolví esto en un método de extensión como tal ...
public static class NavigationHelpers{
public static void MoveFocus(this FrameworkElement control, FocusNavigationDirection direction = FocusNavigationDirection.Next, bool wrap = true) {
TraversalRequest request = new TraversalRequest(direction);
request.Wrapped = wrap;
control.MoveFocus(request);
}
}
... es decir, el código se vuelve aún más simple antes , así ...
private void MyCommandHandler(){
// Do command's work here
Control.MoveFocus();
}
... y si usted no sabe lo que el control es enfocado actualmente, sólo puede hacer esto ...
(Keyboard.FocusedElement as FrameworkElement).MoveFocus();
Espero que esto ayude! Si es así, ¡lo valoro mucho si me votas o lo marcas como aceptado!
Tal vez el evento 'LostFocus' es más adecuado para sus propósitos? (Todavía considero que tu pregunta es interesante, así que +1.) – Heinzi
Miré en LostFocus, pero con mi edición de Estoy usando MVVM, me gustaría no poner el código allí. – mike
Creo que más acerca de LostFocus, ¿cómo podría vincular el comando al evento LostFocus? Quiero hacer esto sin poner código en el código xaml detrás, solo vinculando a un comando en mi ViewModel. – mike