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
- Öğeleri menüye yerleştirme
- Araç çubuğu oluşturma
- Öğeleri araç çubuğuna yerleştirme
- Grup oluşturma
- Öğeleri bir gruba yerleştirme
- Grupları menüye veya araç çubuğuna yerleştirme
- Yerleştirme sıralama (Öncelik)
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%");
}
MenuConfiguration sınıfı
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 MenuConfiguration
diziye 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 Command
sı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:
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 Command
sı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:
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 CommandGroupConfiguration
iç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 CommandGroupConfiguration
dizi ö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 Command
sı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 null
herhangi 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 , MenuConfiguration
veya ToolbarConfiguration
kullanılarak CommandGroupConfiguration
tanı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);