Vytváření vlastních oken nástrojů
Okna vlastních nástrojů jsou skvělé možnosti pro přidání složitého uživatelského rozhraní do sady Visual Studio.
Okno nástroje je základním konceptem uživatelského rozhraní v sadě Visual Studio a v následujícím videu se dozvíte, jak přidat vlastní okno.
Okno nástroje je okno, které lze přesouvat a ukotvit stejně jako Průzkumník řešení, seznam chyb a další dobře známá okna nástrojů. Okno nástroje se skládá z vnějšího prostředí poskytovaného sadou Visual Studio a vlastního ovládacího prvku vnitřního uživatelského rozhraní, což je obvykle XAML <usercontrol>
, které poskytuje rozšíření.
Poznámka:
Pokud chcete vytvořit nové rozšíření s oknem nástrojů, vytvořte nový projekt pomocí šablony Projekt VSIX w/Tool Window (Community) a přeskočte zbytek tohoto receptu. Další informace najdete v tématu Začínáme .
Přidání okna nástroje do existujícího rozšíření vyžaduje 4 jednoduché kroky:
- Vytvořte třídu vnějšího prostředí okna nástroje.
- Přidejte do okna nástroje XAML
<usercontrol>
. - Zaregistrujte okno nástroje.
- Vytvořte příkaz pro zobrazení okna nástroje.
Začněme krokem 1.
Vytvoření okna nástroje
BaseToolWindow<T>
Pomocí obecné základní třídy jsme požádáni, abychom poskytli několik základních informací. Musíme zadat název okna nástroje, vytvořit a vrátit uživatelský ovládací prvek XAML a nastavit skutečnou ToolWindowPane
třídu používanou sadou Visual Studio k vytvoření vnějšího prostředí okna.
using System;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using Community.VisualStudio.Toolkit;
using EnvDTE80;
using Microsoft.VisualStudio.Imaging;
using Microsoft.VisualStudio.Shell;
public class MyToolWindow : BaseToolWindow<MyToolWindow>
{
public override string GetTitle(int toolWindowId) => "My Tool Window";
public override Type PaneType => typeof(Pane);
public override async Task<FrameworkElement> CreateAsync(int toolWindowId, CancellationToken cancellationToken)
{
await Task.Delay(2000); // Long running async task
return new MyUserControl();
}
// Give this a new unique guid
[Guid("d3b3ebd9-87d1-41cd-bf84-268d88953417")]
internal class Pane : ToolWindowPane
{
public Pane()
{
// Set an image icon for the tool window
BitmapImageMoniker = KnownMonikers.StatusInformation;
}
}
}
Musíte vytvořit instanci vlastního uživatelského ovládacího prvku z CreateAsync(int, CancellationToken)
metody, která se pak automaticky předá prostředí okna nástrojů při jeho vytvoření sadou Visual Studio.
Nejprve ale musíte vytvořit uživatelský ovládací prvek.
Přidání uživatelského ovládacího prvku XAML
Může to být jakýkoli XAML se svojí třídou kódu za kódem, takže tady je jednoduchý příklad <usercontrol>
obsahujícího jediné tlačítko:
<UserControl x:Class="MyUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:toolkit="clr-namespace:Community.VisualStudio.Toolkit;assembly=Community.VisualStudio.Toolkit"
mc:Ignorable="d"
toolkit:Themes.UseVsTheme="True"
d:DesignHeight="300" d:DesignWidth="300"
Name="MyToolWindow">
<Grid>
<StackPanel Orientation="Vertical">
<Label Margin="10" HorizontalAlignment="Center">My Window</Label>
<Button Content="Click me!" Click="button1_Click" Width="120" Height="80" Name="button1"/>
</StackPanel>
</Grid>
</UserControl>
Teď máme třídu okna nástrojů, která vrací vlastní ovládací prvek. Dalším krokem je registrace okna nástroje v sadě Visual Studio.
Registrace okna nástroje
Registrace okna nástroje znamená, že sadě Visual Studio oznamujeme její existenci a vytvoření instance. Děláme to z naší třídy balíčku pomocí atributu [ProvideToolWindow]
.
[ProvideToolWindow(typeof(MyToolWindow.Pane))]
public sealed class MyPackage : ToolkitPackage
{
protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress<ServiceProgressData> progress)
{
this.RegisterToolWindows();
}
}
Poznámka:
Všimněte si, že třída balíčku musí dědit z ToolkitPackage
a nikoli z Package
nebo AsyncPackage
.
Můžete určit, jaký styl má okno nástroje mít a kde se má ve výchozím nastavení zobrazovat. Následující příklad ukazuje, že okno nástroje by mělo být umístěné ve stejném dokovacím kontejneru jako Průzkumník řešení v propojeném stylu.
[ProvideToolWindow(typeof(MyToolWindow.Pane), Style = VsDockStyle.Linked, Window = WindowGuids.SolutionExplorer)]
Pokud chcete, aby bylo okno nástroje ve výchozím nastavení viditelné, můžete pomocí atributu [ProvideToolWindowVisibility]
určit jeho viditelnost v různých kontextech uživatelského rozhraní.
[ProvideToolWindowVisibility(typeof(MyToolWindow.Pane), VSConstants.UICONTEXT.NoSolution_string)]
Příkaz k zobrazení okna nástroje
To je stejné jako jakýkoli jiný příkaz a můžete vidět, jak ho přidat v receptu nabídky a příkazy.
Třída obslužné rutiny příkazu, která zobrazuje okno nástroje, bude vypadat přibližně takto:
using Community.VisualStudio.Toolkit;
using Microsoft.VisualStudio.Shell;
using Task = System.Threading.Tasks.Task;
[Command(PackageIds.RunnerWindow)]
internal sealed class MyToolWindowCommand : BaseCommand<MyToolWindowCommand>
{
protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) =>
await MyToolWindow.ShowAsync();
}
Umístění příkazů pro okna nástrojů je obvykle v části View -> Other Windows in the main menu.
Hotovo. Blahopřejeme, vytvořili jste vlastní okno nástrojů.
Získání zdrojového kódu
Zdrojový kód pro tento recept najdete v úložišti ukázek.