Dela via


Lägg till ett verktygsfönster

I den här genomgången lär du dig hur du skapar ett verktygsfönster och integrerar det i Visual Studio på följande sätt:

  • Lägg till en kontroll i verktygsfönstret.

  • Lägg till ett verktygsfält i ett verktygsfönster.

  • Lägg till ett kommando i verktygsfältet.

  • Implementera kommandona.

  • Ange standardpositionen för verktygsfönstret.

Förutsättningar

Visual Studio SDK ingår som en valfri funktion i Visual Studio-installationen. Mer information finns i Installera Visual Studio SDK.

Skapa ett verktygsfönster

  1. Skapa ett projekt med namnet FirstToolWindow med hjälp av VSIX-mallen och lägg till en mall för anpassade verktygsfönster med namnet FirstToolWindow.

    Notera

    Mer information om hur du skapar ett tillägg med ett verktygsfönster finns i Skapa ett tillägg med ett verktygsfönster.

Lägga till en kontroll i verktygsfönstret

  1. Ta bort standardkontrollen. Öppna FirstToolWindowControl.xaml och ta bort Klicka på mig! knapp.

  2. Expandera i verktygslådan Toolboxavsnittet Alla WPF-kontroller och dra kontrollen Media Element till formuläret FirstToolWindowControl. Välj kontrollen och i fönstret Egenskaper namnger du det här elementet mediaElement1.

Lägg till ett verktygsfält i verktygsfönstret

Genom att lägga till ett verktygsfält på följande sätt garanterar du att dess toningar och färger överensstämmer med resten av IDE:t.

  1. I Solution Exploreröppnar du FirstToolWindowPackage.vsct. Filen .vsct definierar gui-elementen (grafiskt användargränssnitt) i verktygsfönstret med hjälp av XML.

  2. I avsnittet <Symbols> letar du reda på den <GuidSymbol> nod vars name attribut är guidFirstToolWindowPackageCmdSet. Lägg till följande två <IDSymbol> element i listan över <IDSymbol> element i den här noden för att definiera ett verktygsfält och en verktygsfältsgrupp.

    <IDSymbol name="ToolbarID" value="0x1000" />
    <IDSymbol name="ToolbarGroupID" value="0x1001" />
    
  3. Precis ovanför avsnittet <Buttons> skapar du ett <Menus> avsnitt som liknar detta:

    <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>
    

    Det finns flera olika typer av menyer. Den här menyn är ett verktygsfält i ett verktygsfönster som definieras av dess type attribut. Inställningarna guid och id utgör verktygsfältets fullständigt kvalificerade ID. Vanligtvis är <Parent> i en meny den innehållande gruppen. Ett verktygsfält definieras dock som sin egen förälder. Därför används samma identifierare för elementen <Menu> och <Parent>. Attributet priority är bara "0".

  4. Verktygsfält liknar menyer på många sätt. På samma sätt som en meny kan ha grupper med kommandon kan verktygsfält också ha grupper. (På menyer avgränsas kommandogrupperna med vågräta linjer. I verktygsfält avgränsas inte grupperna med visuella avdelare.)

    Lägg till ett <Groups> avsnitt som innehåller ett <Group> element. Detta definierar den grupp vars ID du deklarerade i avsnittet <Symbols>. Lägg till avsnittet <Groups> strax efter avsnittet <Menus>.

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

    Genom att ställa in föräldra-GUID och ID till verktygsfältets GUID och ID lägger du till gruppen i verktygsfältet.

Lägg till ett kommando i verktygsfältet

Lägg till ett kommando i verktygsfältet, som visas som en knapp.

  1. I avsnittet <Symbols>, deklarera följande IDSymbol-element strax efter deklarationerna av verktygsfältet och verktygsgruppen.

    <IDSymbol name="cmdidWindowsMedia" value="0x0100" />
    <IDSymbol name="cmdidWindowsMediaOpen" value="0x132" />
    
  2. Lägg till ett Knapp-element i avsnittet <Buttons>. Det här elementet visas i verktygsfältet i verktygsfönstret med en ikonen Sök (förstoringsglas).

    <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. Öppna FirstToolWindowCommand.cs och lägg till följande rader i klassen strax efter de befintliga fälten.

    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;
    

    På så sätt blir dina kommandon tillgängliga i kod.

Lägga till en MediaPlayer-egenskap i FirstToolWindowControl

Från händelsehanterarna för verktygsfältskontrollerna måste koden kunna komma åt Media Player-kontrollen, som är underordnad klassen FirstToolWindowControl.

I Solution Explorerhögerklickar du på FirstToolWindowControl.xaml, klickar på Visa kodoch lägger till följande kod i klassen FirstToolWindowControl.

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

Instansiera verktygsfönstret och verktygsfältet

Lägg till ett verktygsfält och ett menykommando som anropar dialogrutan Öppna fil och spelar upp den valda mediefilen.

  1. Öppna FirstToolWindow.cs och lägg till följande using-direktiv:

    using System.ComponentModel.Design;
    using System.Windows.Forms;
    using Microsoft.VisualStudio.Shell.Interop;
    
  2. I klassen FirstToolWindow lägger du till en offentlig referens till kontrollen FirstToolWindowControl.

    public FirstToolWindowControl control;
    
  3. I slutet av konstruktorn anger du den här kontrollvariabeln till den nyligen skapade kontrollen.

    control = new FirstToolWindowControl();
    base.Content = control;
    
  4. Instansiera verktygsfältet i konstruktorn.

    this.ToolBar = new CommandID(new Guid(FirstToolWindowCommand.guidFirstToolWindowPackageCmdSet),
        FirstToolWindowCommand.ToolbarID);
    this.ToolBarLocation = (int)VSTWT_LOCATION.VSTWT_TOP;
    
  5. I det här läget bör FirstToolWindow-konstruktorn se ut så här:

    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. Lägg till menykommandot i verktygsfältet. I klassen FirstToolWindowCommand.cs lägger du till följande användningsdirektiv:

    using System.Windows.Forms;
    
  7. I klassen FirstToolWindowCommand lägger du till följande kod i slutet av metoden ShowToolWindow(). Kommandot ButtonHandler implementeras i nästa avsnitt.

    // 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);
    

Så här implementerar du ett menykommando i verktygsfönstret

  1. I klassen FirstToolWindowCommand lägger du till en ButtonHandler-metod som anropar dialogrutan Öppna fil. När en fil har valts spelas mediefilen upp.

  2. I klassen FirstToolWindowCommand lägger du till en privat referens till fönstret FirstToolWindow som skapas i metoden FindToolWindow().

    private FirstToolWindow window;
    
  3. Ändra metoden ShowToolWindow() för att ange det fönster som du definierade ovan (så att Kommandohanteraren ButtonHandler kan komma åt fönsterkontrollen. Här är den fullständiga Metoden 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. Lägg till ButtonHandler-metoden. Den skapar en OpenFileDialog för användaren för att ange mediefilen som ska spelas upp och spelar sedan upp den valda filen.

    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);
        }
    }
    

Ange standardpositionen för verktygsfönstret

Ange sedan en standardplats i IDE för verktygsfönstret. Konfigurationsinformation för verktygsfönstret finns i filen FirstToolWindowPackage.cs.

  1. I FirstToolWindowPackage.cshittar du attributet ProvideToolWindowAttribute i klassen FirstToolWindowPackage, som skickar typen FirstToolWindow till konstruktorn. Om du vill ange en standardposition måste du lägga till fler parametrar i konstruktorn i följande exempel.

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

    Den första namngivna parametern är Style och dess värde är Tabbed, vilket innebär att fönstret blir en flik i ett befintligt fönster. Dockningspositionen anges av parametern Window, n det här fallet GUID för Solution Explorer.

    Not

    Mer information om typer av fönster i IDE finns i vsWindowType.

Testa verktygsfönstret

  1. Tryck på F5 för att öppna en ny instans av visual studio-experimentversionen.

  2. På menyn Visa pekar du på Andra fönster och klickar sedan på Första verktygsfönstret.

    Media Player-verktygsfönstret bör öppnas i samma position som Solution Explorer. Om den fortfarande visas i samma position som tidigare återställer du fönsterlayouten (Fönster/Återställ fönsterlayout).

  3. Klicka på knappen (den har ikonen Sök) i verktygsfönstret. Välj en ljud- eller videofil som stöds, till exempel C:\windows\media\chimes.wavoch tryck sedan på Öppna.

    Du borde höra klockljudet.