Поделиться через


Открытие окна динамического инструмента

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

Примечание.

Список предопределенных контекстов пользовательского интерфейса см. в разделе VSConstants.UICONTEXT.

Если вы хотите открыть динамическое окно инструментов при запуске и может завершиться сбоем, необходимо реализовать IVsPackageDynamicToolOwnerEx интерфейс и проверить условия сбоя в методе QueryShowTool . Чтобы оболочка знала, что у вас есть динамическое окно инструментов, которое должно быть открыто при запуске, необходимо добавить значение (задано SupportsDynamicToolOwner 1) в регистрацию пакета. Это значение не является частью стандарта PackageRegistrationAttribute, поэтому необходимо создать настраиваемый атрибут для его добавления. Дополнительные сведения о настраиваемых атрибутах см. в разделе "Использование настраиваемого атрибута регистрации" для регистрации расширения.

Используется FindToolWindow для открытия окна инструментов. Окно инструментов создается по мере необходимости.

Примечание.

Окно динамического инструмента может быть закрыто пользователем. Если вы хотите создать команду меню, чтобы пользователь смог повторно открыть окно инструментов, команда меню должна быть включена в том же контексте пользовательского интерфейса, который открывает окно инструментов и отключен в противном случае.

Открытие динамического окна инструментов

  1. Создайте проект VSIX с именем DynamicToolWindow и добавьте шаблон элемента окна инструментов с именем DynamicWindowPane.cs. Дополнительные сведения см. в разделе "Создание расширения с помощью окна инструментов".

  2. В файле DynamicWindowPanePackage.cs найдите объявление DynamicWindowPanePackage. ProvideToolWindowAttribute Добавьте атрибуты для ProvideToolWindowVisibilityAttribute регистрации окна инструментов.

    [ProvideToolWindow(typeof(DynamicWindowPane)]
    [ProvideToolWindowVisibility(typeof(DynamicWindowPane), VSConstants.UICONTEXT.SolutionExists_string)]
    [PackageRegistration(UseManagedResourcesOnly = true)]
    [InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)] // Info on this package for Help/About
    [ProvideMenuResource("Menus.ctmenu", 1)]
    [ProvideToolWindow(typeof(DynamicToolWindow.DynamicWindowPane))]
    [Guid(DynamicWindowPanePackage.PackageGuidString)]
    public sealed class DynamicWindowPanePackage : Package
    {. . .}
    

    Приведенные выше атрибуты регистрируют окно инструментов с именем DynamicWindowPane в качестве временного окна, которое не сохраняется при закрытии и повторном открытии Visual Studio. DynamicWindowPane открывается всякий раз, когда SolutionExists_string применяется, и закрывается в противном случае.

  3. Выполните сборку решения и запустите отладку. Должен появиться экспериментальный экземпляр. Окно инструментов не должно отображаться.

  4. Откройте проект в экспериментальном экземпляре. Должно появиться окно средства.