Майкрософты клянуться шо все должно работать, но закрался злой баг. Решение типа такое:
public class WindowsFormsHost2 : WindowsFormsHost
{
// когда ВПФ вызывает этот метод для отработки навигационной команды надо кучками установить хосту физический фокус иначе не работает следующий метод
public override bool TabInto(TraversalRequest request)
{
Keyboard.Focus(this);
return base.TabInto(request);
}
// когда ВПФ пытается установить свой фокус...
protected override void OnPreviewGotKeyboardFocus(KeyboardFocusChangedEventArgs e)
{
// ... найти активный контрол в дереве ВинФормс и асинхронно засадить на него фокус
...
base.OnPreviewGotKeyboardFocus(e);
}
}
На простом примере работает довольно. Но не все. Если устанавливать фокус мышкой или табом — работает, но если устанавливать фокус мнемоникой типа Альт-Ц — не работает. Так же фокус теряется при переключении на другие приложения и обратно Альт-Табом. Думаю дожму.