Расширение Visual Studio: Как мне найти, какое окно инструментов находится на переднем плане в группе ссылок вкладок?
В Visual Studio вы можете группировать окна инструментов вместе и идентифицировать их по вкладкам. Например, у вас могут быть окна инструментов "Вывод", "Список ошибок" и "Найти результаты 1", сгруппированные вместе на панели под вашим документом. Когда вы нажимаете на вкладку "Вывод", она выходит на передний план и захватывает фокус. Если вы вернетесь в окно документа, вкладка "Вывод" все еще будет наверху (на переднем плане).
Как программно (в расширении VS) определить (1), какие окна находятся в одной группе вкладок, и (2), какое окно находится на переднем плане, если дано одно из окон в группе?
Вот пример кода, перечисляющий все окна:
var dte = (EnvDTE.DTE)GetService(typeof(EnvDTE.DTE));
var windowOutput = dte.Windows.Item(EnvDTE.Constants.vsWindowKindOutput);
foreach (EnvDTE.Window w in windowOutput.LinkedWindowFrame.Collection)
{
//gives every window, not just those grouped together
}
1 ответ
Вы можете узнать, когда вкладка переключается на начальную итерацию через все окна EnvDTE (Window
/Window2
), получив соответствующий IVsWindowFrame
s, и подписка на уведомления о кадрах (IVsWindowFrameNotify
), чтобы вы получали уведомление при изменении вкладки. Но это все равно не поможет с группами вкладок ("связанных фреймов"), не говоря уже о головной боли, связанной с обновлением ваших слушателей оконных фреймов (когда вкладки открываются / закрываются и т. Д.).
Единственная надежная вещь, о которой я могу думать, это экспортировать настройки в XML (VS делает это для сохранения макета от прогона к прогону), манипулировать XML, а затем импортировать его. Хотя я не уверен, насколько быстро это будет, но стоит попробовать. Вы можете искать Environment_WindowLayout
в вашем файле.vssettings, чтобы увидеть пример XML. На самом деле сделать экспорт / импорт этой информации сложно - вы можете попытать счастья с EnvDTE.Properties
collection, и, возможно, IVsUIShellDocumentWindowMgr ( пример) пригодится, но, возможно, нет.