Приложение состоит из основного окна с TabControl и плагинов, каждый из которых помещается на TabItems данного контрола. У каждого плагина есть набор горячих клавиш. Для того, чтобы горячие клавиши работали, плагин должен быть в фокусе. К сожалению, простое переключение вкладок не решает проблему. Что с этим можно сделать? Я повесила на TabControl обработчик события SelectionChanged, в который добавила следующий код:
TabItem item = GlobalContainer.SelectedItem as TabItem;
if (item == null)
return;
if(item.Content != null)
{
UIElement element = (item.Content as UIElement);
Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Input,
(System.Threading.ThreadStart)delegate
{
element.Focus();
});
}
Где нашла – сейчас не могу вспомнить, видимо, где-то на StackOverflow. Там еще было написано, что имеет смысл поиграть с приоритетом потока, но у меня работает и так.