Почему бы вам просто не использовать этот код в обработчике команд?
private void MyCommandHandler(){
// Do command's work here
TraversalRequest request = new TraversalRequest(FocusNavigationDirection.Next);
request.Wrapped = true;
control.MoveFocus(request);
}
Это в основном то, что делает «Tab», поэтому, если вы делаете то же самое, вам хорошо идти. (Конечно, в обратном направление, если у вас есть команда с Shift-Tab.
Я на самом деле это завернутый в метод расширения, как так ...
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);
}
}
... смысл предшествующего кода становится еще проще , как это ...
private void MyCommandHandler(){
// Do command's work here
Control.MoveFocus();
}
... и если вы не знаете, что в настоящее время сосредоточены управления, вы можете просто сделать это ...
(Keyboard.FocusedElement as FrameworkElement).MoveFocus();
Надеюсь, это поможет! Если да, то очень ценим, если вы проголосуете за меня или отметьте его как принято!
Возможно, событие 'LostFocus' больше подходит для ваших целей? (Я по-прежнему считаю ваш вопрос интересным, поэтому +1.) – Heinzi
Я посмотрел в LostFocus, но с моим редактированием я использую MVVM, я бы не хотел вводить там код. – mike
Я думаю больше о LostFocus, как я могу привязать команду к событию LostFocus? Я хочу, чтобы это не было сделано, не вставляя код в код xaml позади, только привязывая команду к моей модели ViewModel. – mike