Aracılığıyla paylaş


Menülere ve Araç Çubuklarına genel bakış

Menüler ve araç çubukları, kullanıcıların uzantınızdaki komutlara erişme şeklidir. Komutlarınızı kullanıcılara sunmanın kullanışlı grafik yollarıdır. Genellikle ilgili komutlar aynı menü veya araç çubuğunda birlikte kümelenir.

Menüler ve araç çubuklarıyla çalışma

Bu genel bakış, menüler ve araç çubuklarıyla çalışmaya yönelik şu en önemli senaryoları kapsar:

Menü oluşturma

Yeni Genişletilebilirlik Modeli ile bir menü oluşturmak için, sınıfı özniteliğiyle VisualStudioContribution donatan statik bir MenuConfiguration özellik ekleyin. Bu statik özellik, Uzantı projenizdeki herhangi bir sınıfa yerleştirilebilir. Yeni Genişletilebilirlik Modeli örneklerinde, basitlik için sınıfında bulunurlar Extension . Görünür alt öğeleri olmayan menüler kullanıcı arabiriminde görünmez.

[VisualStudioContribution]
public class ExtensionEntrypoint : Extension
{
  [VisualStudioContribution]
  public static MenuConfiguration MyMenu => new("%MyMenu.DisplayName%");
}

sınıfı, MenuConfiguration tanımanız gereken birkaç parametreye sahiptir:

Parametre Türü Zorunlu Açıklama
DisplayName String Yes Menünüzün varsayılan görünen adı. Bu dizeyi yerelleştirmeyi etkinleştirmek için bu dizeyi '%' karakteriyle çevreleyin. Bkz. Meta verileri yerelleştirme.
Tooltiptext String Hayır Menü vurgulandığında veya odaklanıldığında araç ipucu olarak görüntülenecek metin. Bu dizeyi yerelleştirmeyi etkinleştirmek için bu dizeyi '%' karakteriyle çevreleyin. Bkz. Meta verileri yerelleştirme.
Yerleşim CommandPlacement[] Hayır Visual Studio'da menünün üst öğe olarak alınacağı mevcut Grupları belirtir. Bkz. IDE'de menü yerleştirme.
Çocuk MenuChild[] Hayır Bu menünün üst öğesi olması gereken komut, menü ve grup kümesini açıklar. Bu öğelerin dizide tanımlanma sırası, IDE'de görsel olarak görünecekleri sırayı temsil eder. Bkz. Öğeleri bir menüye yerleştirme

IDE'ye menü yerleştirme

Menüler, komutların olduğu gibi IDE'ye yerleştirilir. Bkz. IDE'ye komut yerleştirme.

public override MenuConfiguration MyMenu => new("%MyMenu.DisplayName%")
{
    Placements = new CommandPlacement[]
    {
        CommandPlacement.KnownPlacements.ToolsMenu
    },
};

Öğeleri menüye yerleştirme

Bir menüdeki öğeye yerleştirme işlemi, üzerindeki MenuConfigurationdiziye Children öğe eklenerek yapılır. Öğelerin bu diziye eklenme sırası, bu öğelerin IDE'de görsel olarak nasıl görüntüleneceğini belirler.

Menüye komut yerleştirme

Menüye komut yerleştirme yöntemi kullanılarak MenuChild.Command<T> yapılır ve şablon bağımsız değişkeninin yerine öğesinin Commandsınıf adı kullanılır.

[VisualStudioContribution]
public static MenuConfiguration MyMenu => new("%MyMenu.DisplayName%")
{
    Children = new[]
    {
        MenuChild.Command<MyCommand>(),
    },
};

Menüleri menüye yerleştirme

Menüleri menüye yerleştirme yöntemi kullanılarak MenuChild.Menu yapılır ve parametre olarak başka MenuConfiguration bir menü geçirilir.

[VisualStudioContribution]
public static MenuConfiguration MyChildMenu => new("My Child Menu!");

[VisualStudioContribution]
public static MenuConfiguration MyParentMenu => new("My Parent Menu!")
{
    Children = new[]
    {
        MenuChild.Menu(MyChildMenu),
    },
};

Menü öğelerini gruplara ayırma

Menüdeki öğeler, öğeler arasında bir MenuChild.Separator öğe bulunarak birlikte gruplandırılabilir. Görsel olarak, bu iki öğe arasına yerleştirilmiş ince bir çizgi gibi görünecektir.

[VisualStudioContribution]
public static MenuConfiguration MyMenu1 => new("%MyMenu.DisplayName%")
{
    Children = new[]
    {
        MenuChild.Command<MyCommand1>(), // Assuming there is a `Command` defined in the extension called `MyCommand1`
        MenuChild.Menu(MyMenu2), // Assuming there is a `MenuConfiguration` defined in the extension called `MyMenu2`
        MenuChild.Separator,
        MenuChild.Command<MyCommand2>(), // Assuming there is a `Command` defined in the extension called `MyCommand2`
        MenuChild.Menu(MyMenu3), // Assuming there is a `MenuConfiguration` defined in the extension called `MyMenu3`
    },
};

Bu, satır içi grup tanımlamak için yöntemini kullanarak MenuChild.Group da gerçekleştirilebilir. Ardından sınıfını GroupChild kullanarak öğeleri gruba üst öğe olarak eklersiniz.

[VisualStudioContribution]
public static MenuConfiguration MyMenu1 => new("%MyMenu.DisplayName%")
{
    Children = new[]
    {
        MenuChild.Group(
            GroupChild.Command<MyCommand1>(), // Assuming there is a `Command` defined in the extension called `MyCommand1`
            GroupChild.Menu(MyMenu2)), // Assuming there is a `MenuConfiguration` defined in the extension called `MyMenu2`
        MenuChild.Group(
            GroupChild.Command<MyCommand2>(), // Assuming there is a `Command` defined in the extension called `MyCommand2`
            GroupChild.Menu(MyMenu3)), // Assuming there is a `MenuConfiguration` defined in the extension called `MyMenu3`
    },
};

Önceki iki örnekte, sonuçta elde edilen menü IDE'de aynı olacaktır. Menü MyMenu1 , aşağıdaki ekran görüntüsündeki menüye benzer olacaktır:

Screenshot of menu with separator.

Araç çubuğu oluşturma

Yeni Genişletilebilirlik Modeli ile bir araç çubuğu oluşturmak için, sınıfı özniteliğiyle VisualStudioContribution donatan bir statik ToolbarConfiguration özellik ekleyin. Bu statik özellik, Uzantı projenizdeki herhangi bir sınıfa yerleştirilebilir. Yeni Genişletilebilirlik Modeli örneklerinde basitlik için sınıfta bulunurlar Extension .

[VisualStudioContribution]
public class ExtensionEntrypoint : Extension
{
  [VisualStudioContribution]
  public static ToolbarConfiguration MyToolbar => new("%MyToolbar.DisplayName%");
}

Placement özelliğinin ToolbarConfiguration olduğu gibi null bırakılması araç çubuğunu Standart Araç Çubuğu Çubuğu'na yerleştirir ve menüden araç çubuğu View -> Toolbars seçilerek görünür hale getirilebilir.

ToolbarConfiguration sınıfı

sınıfı, ToolbarConfiguration tanımanız gereken birkaç özelliğe sahiptir:

Özellik Type Zorunlu Açıklama
DisplayName String Yes Araç çubuğunuzun varsayılan görünen adı. Bu dizeyi yerelleştirmeyi etkinleştirmek için bu dizeyi '%' karakteriyle çevreleyin. Bkz. Meta verileri yerelleştirme.
Tooltiptext String Hayır Araç çubuğu üzerine gelindiğinde veya odaklanıldığında araç ipucu olarak görüntülenecek metin. Bu dizeyi yerelleştirmeyi etkinleştirmek için bu dizeyi '%' karakteriyle çevreleyin. Bkz. Meta verileri yerelleştirme.
Yerleşim CommandPlacement[] Hayır Visual Studio'da araç çubuğunun üst öğesi olarak kullanılacak mevcut Grupları belirtir. Bkz. IDE'ye komut yerleştirme. Bu özelliğin olduğu gibi null bırakılması araç çubuğunu Standart Araç Çubuğu Çubuğu'na yerleştirir ve menüden araç çubuğu View -> Toolbars seçilerek görünür hale getirilebilir
Çocuk ToolbarChild[] Hayır Bu araç çubuğunun üst öğesi olması gereken komut, menü ve grup kümesini açıklar. Bu öğelerin dizide tanımlanma sırası, IDE'de görsel olarak görünecekleri sırayı temsil eder. Bkz. Öğeleri araç çubuğuna yerleştirme

Öğeleri araç çubuğuna yerleştirme

Bir araç çubuğuna komut yerleştirme yöntemi kullanılarak ToolbarChild.Command<T> yapılır ve şablon bağımsız değişkeninin yerine öğesinin Commandsınıf adı kullanılır.

[VisualStudioContribution]
public static ToolbarConfiguration MyToolbar => new("%MyToolbar.DisplayName%")
{
    Children = new[]
    {
        ToolbarChild.Command<MyCommand>(),
    },
};

Araç çubuğu öğelerini gruplara ayırma

Araç çubuğundaki öğeler, öğeler arasında bir ToolbarChild.Separator öğe bulunarak birlikte gruplandırılabilir. Görsel olarak, bu iki öğe arasına yerleştirilmiş ince bir çizgi gibi görünecektir.

[VisualStudioContribution]
public static ToolbarConfiguration MyToolbar => new("%MyToolbar.DisplayName%")
{
    Children = new[]
    {
        ToolbarChild.Command<MyCommand1>(), // Assuming there is a `Command` defined in the extension called `MyCommand1`
        ToolbarChild.Separator,
        ToolbarChild.Command<MyCommand2>(), // Assuming there is a `Command` defined in the extension called `MyCommand2`
    },
};

Bu, satır içi grup tanımlamak için yöntemini kullanarak ToolbarChild.Group da gerçekleştirilebilir. Ardından sınıfını ToolbarChild kullanarak öğeleri gruba üst öğe olarak eklersiniz.

[VisualStudioContribution]
public static ToolbarConfiguration MyToolbar => new("%MyToolbar.DisplayName%")
{
    Children = new[]
    {
        ToolbarChild.Group(
            GroupChild.Command<MyCommand1>(), // Assuming there is a `Command` defined in the extension called `MyCommand1`
        ToolbarChild.Group(
            GroupChild.Command<MyCommand2>(), // Assuming there is a `Command` defined in the extension called `MyCommand2`
    },
};

Buradaki iki örnekte, sonuçta elde edilen araç çubuğu IDE'de aynı olacaktır. Araç çubuğu MyToolbar aşağıdaki ekran görüntüsündeki araç çubuğu gibi görünür:

Screenshot of a toolbar with separator.

Grup oluşturma

Grup, bitişik grupların son ve ilk öğeleri arasına ayırıcı yerleştirilecek öğelerin görsel bir gruplandırmadır. Yukarıdaki bölümlerde, veya ToolbarConfigurationözelliğinin MenuConfiguration bağlamı içinde grupların Children nasıl oluşturulacağını açıklar. Grupları kendi CommandGroupConfigurationiçinde tanımlamak da mümkündür. Kendi menünüzü veya araç çubuğunuzu tanımlamadan Visual Studio'da var olan bir menüye veya araç çubuğuna bir grup eklemek istediğinizde bu yararlı olur. Kodunuzu, grup tanımlarınızı menü ve araç çubuğu tanımlarınızdan ayıracak şekilde biçimlendirmek isterseniz de yararlı olabilir.

Yeni Genişletilebilirlik Modeli ile bir grup oluşturmak için statik CommandGroupConfiguration bir özellik ekleyin. Bu statik özellik, Uzantı projenizdeki herhangi bir sınıfa yerleştirilebilir. Yeni Genişletilebilirlik Modeli örneklerinde basitlik için sınıfta bulunurlar Extension . bir CommandGroupConfiguration belirtirse Placement, özniteliğiyle VisualStudioContribution de donatılmalıdır.

public static CommandGroupConfiguration MyGroup => new();

[VisualStudioContribution]
private static CommandGroupConfiguration MyGroupWithPlacement => new(GroupPlacement.KnownPlacements.ToolsMenu);

CommandGroupConfiguration sınıfı

sınıfı, CommandGroupConfiguration tanımanız gereken birkaç parametreye sahiptir:

Parametre Türü Zorunlu Açıklama
Yerleşim GroupPlacement Hayır Visual Studio'da grubun üst öğesi olarak kullanılacak mevcut menüyü veya araç çubuğunu belirtir. Bkz. IDE'ye grup yerleştirme.
Çocuk GroupChild[] Hayır Bu grubun üst öğesi olması gereken komut ve menü kümesini açıklar. Bu öğelerin dizide tanımlanma sırası, IDE'de görsel olarak görünecekleri sırayı temsil eder. Bkz. Öğeleri bir gruba yerleştirme

IDE'ye grup yerleştirme

Visual Studio'da komutların yerleştirilebileceği iyi tanımlanmış bir dizi yer vardır. Bu yerleştirmeler sınıfındaki Commands.GroupPlacementözelliği CommandPlacement.KnownPlacements tarafından tanımlanır. Geçerli kümesi KnownPlacements :

  • ToolsMenu - Komut, Visual Studio'da üst düzey "Araçlar" menüsünün altındaki bir gruba yerleştirilir.
  • ViewOtherWindowsMenu - Komut, Visual Studio'da üst düzey "Görünüm" -> "Diğer Pencereler" menüsünün altındaki bir gruba yerleştirilir.
  • ExtensionsMenu - Komut, Visual Studio'da üst düzey "Uzantılar" menüsünün altındaki bir gruba yerleştirilir.
[VisualStudioContribution]
public static CommandGroupConfiguration MyGroup1 => new(GroupPlacement.KnownPlacements.ToolsMenu);

[VisualStudioContribution]
public static CommandGroupConfiguration MyGroup2 => new(GroupPlacement.KnownPlacements.ExtensionsMenu.WithPriority(0x100));

Öğeleri bir gruba yerleştirme

Komutlar ve menüler, üzerindeki CommandGroupConfigurationdizi özelliği kullanılarak Children gruplara yerleştirilebilir.

Komutları bir gruba yerleştirme

Bir gruba komut yerleştirme yöntemi kullanılarak GroupChild.Command<T> yapılır ve şablon bağımsız değişkeninin yerine öğesinin Commandsınıf adı kullanılır.

[VisualStudioContribution]
public static CommandGroupConfiguration MyGroup => new(GroupPlacement.KnownPlacements.ToolsMenu)
{
    Children = new[]
    {
        GroupChild.Command<MyCommand>(),
    },
};

Menüleri bir gruba yerleştirme

Menüleri bir gruba yerleştirme yöntemi kullanılarak GroupChild.Menu yapılır ve parametre olarak geçirilir MenuConfiguration .

[VisualStudioContribution]
public static MenuConfiguration MyMenu => new("%MyMenu.DisplayName%");

[VisualStudioContribution]
public static CommandGroupConfiguration MyGroup => new(GroupPlacement.KnownPlacements.ToolsMenu)
{
    Children = new[]
    {
        GroupChild.Menu(MyMenu),
    },
};

Grupları menüye veya araç çubuğuna yerleştirme

Menüye grup yerleştirme yöntemi kullanılarak MenuChild.Group yapılır ve parametre olarak geçirilir CommandGroupConfiguration . Bir grubu araç çubuğuna yerleştirme yöntemi kullanılarak ToolbarChild.Group yapılır ve parametre olarak geçirilir CommandGroupConfiguration . Menülere veya araç çubuklarına bu şekilde üst öğeli gruplar dışında nullherhangi bir değere ayarlanmış özelliğine CommandGroupConfiguration sahip Placement olamaz ve özniteliğiyle VisualStudioContribution donatılmamalıdır.

private static CommandGroupConfiguration MyGroup => new()
{
    Children = new[]
    {
        GroupChild.Command<MyCommand1>(), // Assuming there is a `Command` defined in the extension called `MyCommand1`
        GroupChild.Command<MyCommand2>(), // Assuming there is a `Command` defined in the extension called `MyCommand2`
    },
};

[VisualStudioContribution]
public static MenuConfiguration MyMenu => new("%MyMenu.DisplayName%")
{
    Children = new[]
    {
        MenuChild.Group(MyGroup),
    },
};
private static CommandGroupConfiguration MyGroup => new()
{
    Children = new[]
    {
        GroupChild.Command<MyCommand1>(), // Assuming there is a `Command` defined in the extension called `MyCommand1`
        GroupChild.Command<MyCommand2>(), // Assuming there is a `Command` defined in the extension called `MyCommand2`
    },
}

[VisualStudioContribution]
public static ToolbarConfiguration MyToolbar => new("%MyToolbar.DisplayName%")
{
    Children = new[]
    {
        ToolbarChild.Group(MyGroup),
    },
};

Yerleştirme sıralama (Öncelik)

Yerleştirmeler, VSCT'de tanımlanan bir denetime üst öğe eklendiğinde, aynı grup, menü veya araç çubuğuna üst öğe ekli diğer öğelere göre kendi özelliğinin değerine Priority göre sıralanır. Priority özelliği bir unsigned short'dir. ve GroupPlacement CommandPlacement için varsayılan Priority değer ve değeri0, istenen Priority değeri geçirerek veya GroupPlacement.WithPriority yöntemleri çağrılarak CommandPlacement.WithPriority değiştirilebilir. Priority ve yöntemleri kullanılarak CommandPlacement.VsctParent GroupPlacement.VsctParent ve istenen Priority doğrudan geçirilerek de ayarlanabilir.

Priority VisualStudio.Genişletilebilirlik modeli kullanılarak yapılandırma nesneleri aracılığıyla tanımlanan denetimler için öğelerin üst öğesi eklendiğinde (örneğin, üst öğesinin üstlendiği grup, menü veya araç çubuğu , MenuConfigurationveya ToolbarConfigurationkullanılarak CommandGroupConfigurationtanımlandığında) özelliği söz konusu değildir.

GroupPlacement

GroupPlacement.KnownPlacements.ToolsMenu.WithPriority(0x0500);
// Parenting a group to the "Help" top level menu
GroupPlacement.VsctParent(new Guid("{d309f791-903f-11d0-9efc-00a0c911004f}"), id: 0x0088, priority: 0x0500);

CommandPlacement

CommandPlacement.KnownPlacements.ToolsMenu.WithPriority(0x0500);
// Parenting a command to the "Help -> About" group
CommandPlacement.VsctParent(new Guid("{d309f791-903f-11d0-9efc-00a0c911004f}"), id: 0x016B, priority: 0x0801);