VS SDK: ToolWindowPane скрывается при отладке - PullRequest
2 голосов
/ 08 января 2012

Я использовал VS 2010 SDK для создания и отображения пользовательского ToolWindowPane с элементом управления WPF в качестве содержимого. Я создаю новый экземпляр и показываю его каждый раз при нажатии на элемент меню «Инструмент» (атрибут ProvideToolWindow имеет MultiInstances = true).

Когда пользователь присоединяет отладчик (например, нажимает клавишу F5 в проекте C #), моя панель инструментов неожиданно скрывается. Я хотел бы убедиться, что мое окно инструментов всегда открыто, независимо от того, в каком контексте находится пользователь. Есть ли способ, которым я могу это применить?

Я попытался использовать атрибут ProvideToolWindowVisibility, но он автоматически отображает новый экземпляр моего окна инструментов, а не оставляющий открытым.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Реализация QueryShowTool

public:
 int QueryShowTool(Guid % rguidPersistenceSlot, System::UInt32 dwId, [Runtime::InteropServices::Out] int % pfShowTool);

Позволяет VSPackage контролировать, показывать или скрывать инструмент окно. Оболочка вызывает этот метод, когда пользователь переключает представления или контексты, например, Дизайн, Отладка, Полноэкранный.

См. https://docs.microsoft.com/en-us/visualstudio/extensibility/opening-a-dynamic-tool-window?view=vs-2017

0 голосов
/ 16 января 2012

Для VS 2010 SDK Microsoft добавила новый флаг __VSCREATETOOLWIN2.CTW_fDocumentLikeTool

Вы можете использовать этот способ:

public override void OnToolWindowCreated()
{
    IVsWindowFrame windowFrame = Frame as IVsWindowFrame;

    object varFlags;

    windowFrame.GetProperty((int)__VSFPROPID.VSFPROPID_CreateToolWinFlags, out varFlags);
    int flags = (int)varFlags | (int)__VSCREATETOOLWIN2.CTW_fDocumentLikeTool;
    windowFrame.SetProperty((int)__VSFPROPID.VSFPROPID_CreateToolWinFlags, flags);
}

Таким образом, окно инструментов остается открытым в «Document Well» при отладке

Однако я должен сказать, что это создает нам некоторые проблемы при отладке проектов, не позволяя нам открывать файлы кода во время отладки, например, если управление документами в Visual Studio было «блочным», для этого нового флага не так много информации ...

Поэтому мы предпочли подключиться к EnvDTE.DebuggerEvents и показать окно инструментов, если скрыть, когда начинается сеанс отладки ...

(наше окно инструментов имеет MultiInstances = false)

...