Perché non si utilizza questo codice nel gestore di comandi?
private void MyCommandHandler(){
// Do command's work here
TraversalRequest request = new TraversalRequest(FocusNavigationDirection.Next);
request.Wrapped = true;
control.MoveFocus(request);
}
Questo è praticamente ciò che fa 'Tab', quindi se fai lo stesso, sei a posto. (Naturalmente invertire il senso se si dispone di un comando con Shift-Tab.
Io in realtà avvolto questo in un metodo di estensione in questo modo ...
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);
}
}
... significa che il codice di prima diventa ancora più semplice , come questo ...
private void MyCommandHandler(){
// Do command's work here
Control.MoveFocus();
}
... e se non sai cosa quello attualmente attivo di controllo è, si può solo fare questo ...
(Keyboard.FocusedElement as FrameworkElement).MoveFocus();
Spero che questo aiuti! Se è così, è molto apprezzato se mi voti o contrassegnato come accettato!
Forse l'evento 'LostFocus' è più adatto ai tuoi scopi? (Continuo a considerare la tua domanda come interessante, quindi +1.) – Heinzi
Ho guardato in LostFocus, ma con la mia modifica di Sto usando MVVM, mi piacerebbe non inserire il codice lì. – mike
Sto pensando di più a LostFocus, come potrei associare il comando all'evento LostFocus? Voglio t questo senza inserire codice nel codice xaml dietro, solo vincolante per un comando nel mio ViewModel. – mike