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


Добавление окна инструментов

В этом пошаговом руководстве вы узнаете, как создать окно инструментов и интегрировать его в Visual Studio следующим образом:

  • Добавьте элемент управления в окно инструментов.

  • Добавьте панель инструментов в окно инструментов.

  • Добавьте команду на панель инструментов.

  • Реализуйте команды.

  • Задайте положение по умолчанию для окна инструментов.

Необходимые компоненты

Пакет SDK Для Visual Studio включен в качестве необязательной функции в настройке Visual Studio. Дополнительные сведения см. в разделе "Установка пакета SDK для Visual Studio".

Создание окна инструментов

  1. Создайте проект с именем FirstToolWindow с помощью шаблона VSIX и добавьте пользовательский шаблон элемента окна инструментов с именем FirstToolWindow.

    Примечание.

    Дополнительные сведения о создании расширения с помощью окна инструментов см. в разделе "Создание расширения с помощью окна инструментов".

Добавление элемента управления в окно инструментов

  1. Удалите элемент управления по умолчанию. Откройте FirstToolWindowControl.xaml и удалите кнопку Click Me!

  2. На панели элементов разверните раздел "Все элементы управления WPF" и перетащите элемент управления Media в форму FirstToolWindowControl. Выберите элемент управления и в окне "Свойства " назовите этот элемент mediaElement1.

Добавление панели инструментов в окно инструментов

Добавив панель инструментов следующим образом, вы гарантируете, что его градиенты и цвета согласованы с остальной частью интегрированной среды разработки.

  1. В Обозреватель решений откройте FirstToolWindowPackage.vsct. VSCT-файл определяет элементы графического пользовательского интерфейса (GUI) в окне средства с помощью XML.

  2. <Symbols> В разделе найдите <GuidSymbol> узел, атрибут которого name являетсяguidFirstToolWindowPackageCmdSet. Добавьте следующие два <IDSymbol> элемента в список <IDSymbol> элементов в этом узле, чтобы определить панель инструментов и группу инструментов.

    <IDSymbol name="ToolbarID" value="0x1000" />
    <IDSymbol name="ToolbarGroupID" value="0x1001" />
    
  3. <Buttons> Над разделом создайте раздел, аналогичный <Menus> следующему:

    <Menus>
        <Menu guid="guidFirstToolWindowPackageCmdSet" id="ToolbarID" priority="0x0000" type="ToolWindowToolbar">
            <Parent guid="guidFirstToolWindowPackageCmdSet" id="ToolbarID" />
            <Strings>
                <ButtonText>Tool Window Toolbar</ButtonText>
                <CommandName>Tool Window Toolbar</CommandName>
            </Strings>
        </Menu>
    </Menus>
    

    Существует несколько различных видов меню. Это меню — это панель инструментов в окне инструментов, определяемая его type атрибутом. id Параметры guid составляют полный идентификатор панели инструментов. Как правило, <Parent> меню — это содержащаяся группа. Однако панель инструментов определяется как собственный родительский элемент. Таким образом, для элементов <Parent> используется <Menu> тот же идентификатор. Атрибут priority имеет значение "0".

  4. Панели инструментов похожи на меню многими способами. Например, так же, как меню может иметь группы команд, панели инструментов также могут иметь группы. (В меню группы команд разделяются горизонтальными строками. На панелях инструментов группы не разделяются визуальными разделителями.)

    <Groups> Добавьте раздел, содержащий <Group> элемент. Это определяет группу, идентификатор которой вы объявили <Symbols> в разделе. <Groups> Добавьте раздел сразу после <Menus> раздела.

    <Groups>
        <Group guid="guidFirstToolWindowPackageCmdSet" id="ToolbarGroupID" priority="0x0000">
            <Parent guid="guidFirstToolWindowPackageCmdSet" id="ToolbarID" />
        </Group>
    </Groups>
    

    Задав родительский GUID и идентификатор GUID панели инструментов, добавьте группу на панель инструментов.

Добавление команды на панель инструментов

Добавьте команду на панель инструментов, которая отображается в виде кнопки.

  1. <Symbols> В разделе объявите следующие элементы IDSymbol сразу после объявления панели инструментов и группы панелей инструментов.

    <IDSymbol name="cmdidWindowsMedia" value="0x0100" />
    <IDSymbol name="cmdidWindowsMediaOpen" value="0x132" />
    
  2. Добавьте элемент Button в <Buttons> раздел. Этот элемент будет отображаться на панели инструментов в окне инструментов с значком поиска (увеличивающееся стекло).

    <Button guid="guidFirstToolWindowPackageCmdSet" id="cmdidWindowsMediaOpen" priority="0x0101" type="Button">
        <Parent guid="guidFirstToolWindowPackageCmdSet" id="ToolbarGroupID"/>
        <Icon guid="guidImages" id="bmpPicSearch" />
        <Strings>
            <CommandName>cmdidWindowsMediaOpen</CommandName>
            <ButtonText>Load File</ButtonText>
        </Strings>
    </Button>
    
  3. Откройте FirstToolWindowCommand.cs и добавьте следующие строки в класс сразу после существующих полей.

    public const string guidFirstToolWindowPackageCmdSet = "00000000-0000-0000-0000-0000";  // get the GUID from the .vsct file
    public const uint cmdidWindowsMedia = 0x100;
    public const int cmdidWindowsMediaOpen = 0x132;
    public const int ToolbarID = 0x1000;
    

    Это делает команды доступными в коде.

Добавление свойства MediaPlayer в FirstToolWindowControl

В обработчиках событий для элементов управления панели инструментов код должен иметь доступ к элементу управления Медиаплеер, который является дочерним элементом класса FirstToolWindowControl.

В Обозреватель решений щелкните правой кнопкой мыши FirstToolWindowControl.xaml, щелкните View Code и добавьте следующий код в класс FirstToolWindowControl.

public System.Windows.Controls.MediaElement MediaPlayer
{
    get { return mediaElement1; }
}

Создание экземпляра окна инструментов и панели инструментов

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

  1. Откройте FirstToolWindow.cs и добавьте следующие using директивы:

    using System.ComponentModel.Design;
    using System.Windows.Forms;
    using Microsoft.VisualStudio.Shell.Interop;
    
  2. В классе FirstToolWindow добавьте общедоступную ссылку на элемент управления FirstToolWindowControl.

    public FirstToolWindowControl control;
    
  3. В конце конструктора задайте для этой переменной элемента управления только что созданный элемент управления.

    control = new FirstToolWindowControl();
    base.Content = control;
    
  4. Создайте экземпляр панели инструментов внутри конструктора.

    this.ToolBar = new CommandID(new Guid(FirstToolWindowCommand.guidFirstToolWindowPackageCmdSet),
        FirstToolWindowCommand.ToolbarID);
    this.ToolBarLocation = (int)VSTWT_LOCATION.VSTWT_TOP;
    
  5. На этом этапе конструктор FirstToolWindow должен выглядеть следующим образом:

    public FirstToolWindow() : base(null)
    {
        this.Caption = "FirstToolWindow";
        this.BitmapResourceID = 301;
        this.BitmapIndex = 1;
        control = new FirstToolWindowControl();
        base.Content = control;
        this.ToolBar = new CommandID(new Guid(FirstToolWindowCommand.guidFirstToolWindowPackageCmdSet),
            FirstToolWindowCommand.ToolbarID);
            this.ToolBarLocation = (int)VSTWT_LOCATION.VSTWT_TOP;
    }
    
  6. Добавьте команду меню на панель инструментов. В классе FirstToolWindowCommand.cs добавьте следующую директиву using:

    using System.Windows.Forms;
    
  7. В классе FirstToolWindowCommand добавьте следующий код в конце метода ShowToolWindow(). Команда ButtonHandler будет реализована в следующем разделе.

    // Create the handles for the toolbar command.
    var mcs = this.ServiceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
    var toolbarbtnCmdID = new CommandID(new Guid(FirstToolWindowCommand.guidFirstToolWindowPackageCmdSet),
        FirstToolWindowCommand.cmdidWindowsMediaOpen);
    var menuItem = new MenuCommand(new EventHandler(
        ButtonHandler), toolbarbtnCmdID);
    mcs.AddCommand(menuItem);
    

Реализация команды меню в окне инструментов

  1. В классе FirstToolWindowCommand добавьте метод ButtonHandler, вызывающий диалоговое окно Open File . При выборе файла он воспроизводит файл мультимедиа.

  2. В классе FirstToolWindowCommand добавьте частную ссылку на окно FirstToolWindow, которое создается в методе FindToolWindow().

    private FirstToolWindow window;
    
  3. Измените метод ShowToolWindow(), чтобы задать указанное выше окно (чтобы обработчик команд ButtonHandler смог получить доступ к элементу управления окном. Ниже приведен полный метод ShowToolWindow().

    private void ShowToolWindow(object sender, EventArgs e)
    {
        window = (FirstToolWindow) this.package.FindToolWindow(typeof(FirstToolWindow), 0, true);
        if ((null == window) || (null == window.Frame))
        {
            throw new NotSupportedException("Cannot create tool window");
        }
    
        IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame;
        Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(windowFrame.Show());
    
        var mcs = this.ServiceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
        var toolbarbtnCmdID = new CommandID(new Guid(FirstToolWindowCommandguidFirstToolWindowPackageCmdSet),
            FirstToolWindowCommand.cmdidWindowsMediaOpen);
        var menuItem = new MenuCommand(new EventHandler(
            ButtonHandler), toolbarbtnCmdID);
        mcs.AddCommand(menuItem);
    }
    
  4. Добавьте метод ButtonHandler. Он создает OpenFileDialog для пользователя, чтобы указать файл мультимедиа для воспроизведения, а затем воспроизвести выбранный файл.

    private void ButtonHandler(object sender, EventArgs arguments)
    {
        OpenFileDialog openFileDialog = new OpenFileDialog();
        DialogResult result = openFileDialog.ShowDialog();
        if (result == DialogResult.OK)
        {
            window.control.MediaPlayer.Source = new System.Uri(openFileDialog.FileName);
        }
    }
    

Установка позиции по умолчанию для окна инструментов

Затем укажите расположение по умолчанию в интегрированной среде разработки для окна инструментов. Сведения о конфигурации окна инструментов содержатся в файле FirstToolWindowPackage.cs .

  1. В FirstToolWindowPackage.cs найдите ProvideToolWindowAttribute атрибут в FirstToolWindowPackage классе, который передает тип FirstToolWindow конструктору. Чтобы указать позицию по умолчанию, необходимо добавить дополнительные параметры в следующий пример конструктора.

    [ProvideToolWindow(typeof(FirstToolWindow),
        Style = Microsoft.VisualStudio.Shell.VsDockStyle.Tabbed,
        Window = "3ae79031-e1bc-11d0-8f78-00a0c9110057")]
    

    Первый именованный параметр имеет значение Style , Tabbedа это означает, что окно будет вкладкой в существующем окне. Позиция док-станции указывается параметром Window n в этом случае, GUID Обозреватель решений.

    Примечание.

    Дополнительные сведения о типах окон в интегрированной среде разработки см. в статье vsWindowType.

Проверка окна средства

  1. Нажмите клавишу F5 , чтобы открыть новый экземпляр экспериментальной сборки Visual Studio.

  2. В меню "Вид" наведите указатель мыши на другие окна и нажмите кнопку "Окно первого средства".

    Окно средства проигрывателя мультимедиа должно открываться в той же позиции, что и Обозреватель решений. Если он по-прежнему отображается в той же позиции, что и раньше, сбросьте макет окна (макет окна или сброса окна).

  3. Нажмите кнопку (значок поиска ) в окне инструмента. Выберите поддерживаемый звуковой или видеофайл, например C:\windows\media\chimes.wav, а затем нажмите клавишу OPEN.

    Вы должны услышать шумный звук.