VSPackages kullanıcı arabirimi öğelerini nasıl ekler?
VSPackage, .vsct dosyası aracılığıyla Visual Studio'ya menüler, araç çubukları ve araç pencereleri gibi kullanıcı arabirimi (UI) öğeleri ekleyebilir.
Kullanıcı arabirimi öğelerine yönelik tasarım yönergelerini Visual Studio kullanıcı deneyimi yönergelerinde bulabilirsiniz.
Visual Studio komut tablosu mimarisi
Belirtildiği gibi, komut tablosu mimarisi, daha önce belirtilen mimari ilkelerini destekler. Komut tablosu mimarisinin soyutlamalarının, veri yapılarının ve araçlarının arkasındaki kavramlar aşağıdaki gibidir:
Üç temel öğe türü vardır: menüler, komutlar ve gruplar. Menüler kullanıcı arabiriminde menüler, alt menüler, araç çubukları veya araç pencereleri olarak gösterilebilir. Komutlar, kullanıcının IDE'de yürütebileceği yordamlardır ve menü öğeleri, düğmeler, liste kutuları veya diğer denetimler olarak gösterilebilir. Gruplar hem menüler hem de komutlar için kapsayıcılardır.
Her öğe, öğeyi, diğer öğelere göre önceliğini ve davranışını değiştiren bayrakları tanımlayan bir tanım tarafından belirtilir.
Her öğenin, öğenin üst öğesini tanımlayan bir yerleşimi vardır. Bir öğenin birden çok ana öğesi olabilir, böylece kullanıcı arabiriminde birden çok konumda görünebilir.
Bu gruptaki tek alt öğe olsa bile, her komutun üst öğesi olarak bir grubu olmalıdır. Her standart menünün de bir üst grubu olmalıdır. Araç çubukları ve araç pencereleri kendi ebeveyni gibi davranır. Bir grubun ana Visual Studio menü çubuğu veya herhangi bir menü, araç çubuğu veya araç penceresi üst öğesi olabilir.
Öğeler nasıl tanımlanır?
. vsct dosyası XML olarak biçimlendirilir. Bir paket için kullanıcı arabirimi öğelerini tanımlar ve bu öğelerin IDE'de nerede görüneceğini belirler. Paketteki her menü, grup veya komuta önce bölümünde bir GUID ve kimlik Symbols
atanır. .vsct dosyasının geri kalanı boyunca, her menü, komut ve grup GUID ve kimlik bileşimiyle tanımlanır. Aşağıdaki örnekte, şablonda Menü Komutu seçildiğinde Visual Studio paket şablonu tarafından oluşturulan tipik Symbols
bir bölüm gösterilmektedir.
<Symbols>
<!-- This is the package guid. -->
<GuidSymbol name="guidMenuTextPkg" value="{b1253bc6-d266-402b-89e7-5e3d3b22c746}" />
<!-- This is the guid used to group the menu commands together -->
<GuidSymbol name="guidMenuTextCmdSet" value="{a633d4e4-6c65-4436-a138-1abeba7c9a69}">
<IDSymbol name="MyMenuGroup" value="0x1020" />
<IDSymbol name="cmdidMyCommand" value="0x0100" />
</GuidSymbol>
<GuidSymbol name="guidImages" value="{53323d9a-972d-4671-bb5b-9e418480922f}">
<IDSymbol name="bmpPic1" value="1" />
<IDSymbol name="bmpPic2" value="2" />
<IDSymbol name="bmpPicSearch" value="3" />
<IDSymbol name="bmpPicX" value="4" />
<IDSymbol name="bmpPicArrows" value="5" />
</GuidSymbol>
</Symbols>
Bölümün Symbols
en üst düzey öğesi GuidSymbol öğesidir. GuidSymbol
öğeleri, paketleri ve bunların bileşen parçalarını tanımlamak için IDE tarafından kullanılan GUID'lerle adları eşler.
Not
GUID'ler Visual Studio paket şablonu tarafından otomatik olarak oluşturulur. Araçlar menüsünde GUID Oluştur'a tıklayarak da benzersiz bir GUID oluşturabilirsiniz.
İlk GuidSymbol
öğesi, guid<PackageName>Pkg
paketin guid değeridir. Bu, Visual Studio tarafından paketi yüklemek için kullanılan GUID'dir. Genellikle alt öğeleri yoktur.
Kurala göre, menüler ve komutlar ikinci GuidSymbol
bir öğe guid<PackageName>CmdSet
altında gruplandırılır ve bit eşlemler üçüncü GuidSymbol
guidImages
öğe olan altındadır. Bu kuralı izlemeniz gerekmez, ancak her menü, grup, komut ve bit eşlem bir GuidSymbol
öğenin alt öğesi olmalıdır.
Paket komut kümesini temsil eden ikinci GuidSymbol
öğede birkaç IDSymbol
öğe vardır. Her IDSymbol öğesi bir adı sayısal değerle eşler ve komut kümesinin parçası olan menü, grup veya komutu temsil edebilir. IDSymbol
Üçüncü GuidSymbol
öğedeki öğeler, komutlar için simge olarak kullanılabilecek bit eşlemleri temsil eder. GUID/KIMLIK çiftlerinin bir uygulamada benzersiz olması gerektiğinden, aynı GuidSymbol
öğenin iki alt öğesi aynı değere sahip olmayabilir.
Menüler, gruplar ve komutlar
Menü, grup veya komut guid ve kimliğe sahipse, IDE'ye eklenebilir. Her kullanıcı arabirimi öğesi aşağıdakilere sahip olmalıdır:
guid
UI öğesinin altında tanımlandığı öğenin adıylaGuidSymbol
eşleşen bir öznitelik.id
İlişkiliIDSymbol
öğenin adıyla eşleşen bir öznitelik.
guid
ve id
öznitelikleri birlikte kullanıcı arabirimi öğesinin imzasını oluşturur.
priority
Kullanıcı arabirimi öğesinin üst menüsüne veya grubuna yerleştirilmesini belirleyen bir öznitelik.Üst menü veya grubun imzasını belirten ve
id
özniteliklerine sahipguid
bir Üst öğe.
Menüler
Her menü, bölümünde Menü öğesi Menus
olarak tanımlanır. Menülerde , id
, ve öznitelikleri, priority
bir Parent
öğesi ve ayrıca aşağıdaki ek öznitelikler ve alt öğeler olmalıdırguid
:
type
Menünün IDE'de bir tür menü olarak mı yoksa araç çubuğu olarak mı görüneceğini belirten bir öznitelik.IDE'deki menünün başlığını belirten ButtonText öğesini ve menüye erişmek için Komut penceresinde kullanılan adı belirten commandname öğesini içeren Strings öğesi.
İsteğe bağlı bayraklar. CommandFlag öğesi, IDE'deki görünümünü veya davranışını değiştirmek için menü tanımında görüntülenebilir.
Araç çubuğu gibi sabitlenebilir bir öğe olmadığı sürece her Menu
öğenin üst öğesi olarak bir grubu olmalıdır. Yerleştirilebilir menü kendi üst öğesidir. Özniteliğinin menüleri ve değerleri hakkında daha fazla bilgi için type
Menu öğesi belgelerine bakın.
Aşağıdaki örnekte, Araçlar menüsünün yanındaki Visual Studio menü çubuğunda görüntülenen bir menü gösterilmektedir.
<Menu guid="guidTopLevelMenuCmdSet" id="TopLevelMenu" priority="0x700" type="Menu">
<Parent guid="guidSHLMainMenu" id="IDG_VS_MM_TOOLSADDINS" />
<Strings>
<ButtonText>TestMenu</ButtonText>
<CommandName>TestMenu</CommandName>
</Strings>
</Menu>
Gruplar
Grup, .vsct dosyasının Groups
bölümünde tanımlanan bir öğedir. Gruplar yalnızca kapsayıcılardır. IDE'de, bir menüdeki bölme satırı dışında görünmezler. Bu nedenle, bir Group öğesi yalnızca imzası, önceliği ve üst öğesiyle tanımlanır.
Bir grubun menüsü, başka bir grubu veya kendisini üst öğe olarak kullanabilir. Ancak, üst öğe genellikle bir menü veya araç çubuğudur. Önceki örnekteki menü grubun alt öğesidir IDG_VS_MM_TOOLSADDINS
ve bu grup Visual Studio menü çubuğunun alt öğesidir. Aşağıdaki örnekteki grup, önceki örnekteki menünün alt öğesidir.
<Group guid="guidTopLevelMenuCmdSet" id="MyMenuGroup" priority="0x0600">
<Parent guid="guidTopLevelMenuCmdSet" id="TopLevelMenu"/>
</Group>
Bir menünün parçası olduğundan, bu grup genellikle komutlar içerir. Ancak, başka menüler de içerebilir. Aşağıdaki örnekte gösterildiği gibi alt menüler bu şekilde tanımlanır.
<Menu guid="guidTopLevelMenuCmdSet" id="SubMenu" priority="0x0100" type="Menu">
<Parent guid="guidTopLevelMenuCmdSet" id="MyMenuGroup"/>
<Strings>
<ButtonText>Sub Menu</ButtonText>
<CommandName>Sub Menu</CommandName>
</Strings>
</Menu>
Komutlar
IDE'ye sağlanan komut, Button öğesi veya Birleşik giriş öğesi olarak tanımlanır. Bir menüde veya araç çubuğunda görünmesi için komutun üst öğesi olarak bir grup olması gerekir.
Düğmeler
Düğmeler bölümünde tanımlanır Buttons
. Bir kullanıcının tek bir komutu yürütmek için tıklattığını herhangi bir menü öğesi, düğme veya başka bir öğe düğme olarak kabul edilir. Bazı düğme türleri liste işlevselliği de içerebilir. Düğmeler, menülerle aynı gerekli ve isteğe bağlı özniteliklere sahiptir ve IDE'deki düğmeyi temsil eden bit eşlemin GUID'sini ve kimliğini belirten bir Icon öğesine de sahip olabilir. Düğmeler ve bunların öznitelikleri hakkında daha fazla bilgi için Düğmeler öğesi belgelerine bakın.
Aşağıdaki örnekteki düğme, önceki örnekte grubun alt öğesidir ve IDE'de bu grubun üst menüsünde menü öğesi olarak görünür.
<Button guid="guidTopLevelMenuCmdSet" id="cmdidTestCommand" priority="0x0100" type="Button">
<Parent guid="guidTopLevelMenuCmdSet" id="MyMenuGroup" />
<Icon guid="guidImages" id="bmpPic1" />
<Strings>
<CommandName>cmdidTestCommand</CommandName>
<ButtonText>Test Command</ButtonText>
</Strings>
</Button>
Tarak
Birleşik girişler bölümünde tanımlanır Combos
. Her Combo
öğe IDE'deki bir açılan liste kutusunu temsil eder. Liste kutusu, birleşik giriş özniteliğinin type
değerine bağlı olarak kullanıcılar tarafından yazılabilir veya yazılamaz. Birleşik girişler, düğmelerin sahip olduğu öğelere ve davranışlara sahiptir ve aşağıdaki ek özniteliklere de sahip olabilir:
Piksel
defaultWidth
genişliğini belirten bir öznitelik.Liste
idCommandList
kutusunda görüntülenen öğeleri içeren bir liste belirten öznitelik. Komut listesi birleşik giriş içeren aynıGuidSymbol
düğümde bildirilmelidir.
Aşağıdaki örnek bir birleşik giriş öğesi tanımlar.
<Combos>
<Combo guid="guidFirstToolWinCmdSet"
id="cmdidWindowsMediaFilename"
priority="0x0100" type="DynamicCombo"
idCommandList="cmdidWindowsMediaFilenameGetList"
defaultWidth="130">
<Parent guid="guidFirstToolWinCmdSet"
id="ToolbarGroupID" />
<CommandFlag>IconAndText</CommandFlag>
<CommandFlag>CommandWellOnly</CommandFlag>
<CommandFlag>StretchHorizontally</CommandFlag>
<Strings>
<CommandName>Filename</CommandName>
<ButtonText>Enter a Filename</ButtonText>
</Strings>
</Combo>
</Combos>
Bit Eşlemler
Bir simgeyle birlikte görüntülenecek komutlar, GUID ve kimliğini kullanarak bit eşlemlere başvuran bir öğe içermelidir Icon
. Her bit eşlem, bölümünde Bir Bit Eşlem öğesi Bitmaps
olarak tanımlanır. Bir Bitmap
tanımın tek gerekli öznitelikleri, kaynak dosyaya işaret eden ve href
'tirguid
. Kaynak dosya bir kaynak şeridiyse, şeritteki kullanılabilir görüntüleri listelemek için usedList özniteliği de gereklidir. Daha fazla bilgi için Bit Eşlem öğesi belgelerine bakın.
Ebeveyn -lik
Aşağıdaki kurallar, bir öğenin başka bir öğeyi üst öğe olarak nasıl çağırabileceğini yönetir.
Öğe | Komut Tablosunun bu bölümünde tanımlanmış | İçerebilir (üst öğe olarak veya bölüme CommandPlacements yerleştirilerek ya da her ikisiyle birlikte) |
içerebilir (üst öğe olarak adlandırılır) |
---|---|---|---|
Gruplandırma | Gruplar öğesi, IDE, diğer VSPackage'lar | Menü, grup, öğenin kendisi | Menüler, gruplar ve komutlar |
Menü | Menus öğesi, IDE, diğer VSPackage'lar | 1 - n grup | 0 - n grup |
Araç Çubuğu | Menus öğesi, IDE, diğer VSPackage'lar | Öğenin kendisi | 0 - n grup |
Menü Öğesi | Düğmeler öğesi, IDE, diğer VSPackage'lar | 1 ile n arasında grup, öğenin kendisi | -0 - n grupları |
Düğme | Düğmeler öğesi, IDE, diğer VSPackage'lar | 1 ile n arasında grup, öğenin kendisi | |
Açılan | Combos öğesi, IDE, diğer VSPackage'lar | 1 ile n arasında grup, öğenin kendisi |
Menü, komut ve grup yerleşimi
IDE'de birden fazla konumda bir menü, grup veya komut görüntülenebilir. Bir öğenin birden çok konumda görünmesi için bölüme CommandPlacements
CommandPlacement öğesi olarak eklenmesi gerekir. Herhangi bir menü, grup veya komut, komut yerleşimi olarak eklenebilir. Ancak, birden çok bağlama duyarlı konumda görünemedikleri için araç çubukları bu şekilde konumlandırılamaz.
Komut yerleşimlerinde , id
ve priority
öznitelikleri vardırguid
. GUID ve kimlik, konumlandırılan öğeyle eşleşmelidir. özniteliği, priority
öğenin diğer öğelerle ilgili yerleşimini yönetir. IDE, aynı önceliğe sahip iki veya daha fazla öğeyi birleştirdiğinde, IDE paket kaynaklarının paket oluşturulduğunda aynı sırada okunmasını garanti etmediğinden yerleşimleri tanımlanmamış olur.
Bir menü veya grup birden çok konumda görünürse, her örnekte söz diziminin veya grubun tüm alt öğeleri görünür.
Komut görünürlüğü ve bağlamı
Birden çok VSPackage yüklendiğinde menülerin, menü öğelerinin ve araç çubuklarının bir kısmı IDE'yi karmaşık hale gelebilir. Bu sorunu önlemek için görünürlük kısıtlamalarını ve komut bayraklarını kullanarak tek tek kullanıcı arabirimi öğelerinin görünürlüğünü denetleyebilirsiniz.
Görünürlük kısıtlamaları
Görünürlük kısıtlaması bölümünde VisibilityItem öğesi VisibilityConstraints
olarak ayarlanır. Görünürlük kısıtlaması, hedef öğenin görünür olduğu belirli kullanıcı arabirimi bağlamlarını tanımlar. Bu bölümde yer alan bir menü veya komut yalnızca tanımlı bağlamlardan biri etkin olduğunda görünür. Bu bölümde bir menüye veya komuta başvurulmazsa, varsayılan olarak her zaman görünür. Bu bölüm gruplar için geçerli değildir.
VisibilityItem
öğelerinin aşağıdaki gibi üç özniteliği olmalıdır: guid
hedef UI öğesinin ve id
ve context
. context
özniteliği, hedef öğenin ne zaman görünür olacağını belirtir ve geçerli kullanıcı arabirimi bağlamını değeri olarak alır. Visual Studio'nun kullanıcı arabirimi bağlam sabitleri sınıfın VSConstants üyeleridir. Her VisibilityItem
öğe yalnızca bir bağlam değeri alabilir. İkinci bir bağlam uygulamak için, aşağıdaki örnekte gösterildiği gibi aynı öğeye işaret eden ikinci VisibilityItem
bir öğe oluşturun.
<VisibilityConstraints>
<VisibilityItem guid="guidSolutionToolbarCmdSet"
id="cmdidTestCmd"
context="UICONTEXT_SolutionHasSingleProject" />
<VisibilityItem guid="guidSolutionToolbarCmdSet"
id="cmdidTestCmd"
context="UICONTEXT_SolutionHasMultipleProjects" />
</VisibilityConstraints>
Komut bayrakları
Aşağıdaki komut bayrakları, uygulandıkları menülerin ve komutların görünürlüğünü etkileyebilir.
AlwaysCreate
Menü, grup veya düğme olmasa bile oluşturulur.
Geçerli olan: Menu
CommandWellOnly
Komut üst düzey menüde görünmüyorsa ve ek kabuk özelleştirmesi için kullanılabilir hale getirmek istiyorsanız (örneğin, bir anahtara bağlama) bu bayrağı uygulayın. VSPackage yüklendikten sonra, bir kullanıcı Seçenekler iletişim kutusunu açıp Klavye Ortamı kategorisi altındaki komut yerleşimini düzenleyerek bu komutları özelleştirebilir. Kısayol menülerine, araç çubuklarına, menü denetleyicilerine veya alt menülere yerleştirmeyi etkilemez.
Geçerli: Button
, Combo
DefaultDisabled
Varsayılan olarak, komutu uygulayan VSPackage yüklenmediyse veya QueryStatus yöntemi çağrılmadıysa komut devre dışı bırakılır.
Geçerli: Button
, Combo
DefaultInvisible
Varsayılan olarak, komutu uygulayan VSPackage yüklenmediyse veya QueryStatus yöntemi çağrılmadıysa komut görünmez.
bayrağıyla DynamicVisibility
birleştirilmelidir.
Geçerli: Button
, Combo
, Menu
DynamicVisibility
Komutun görünürlüğü, yöntemi veya bölümüne dahil edilen bir bağlam GUID'i VisibilityConstraints
kullanılarak QueryStatus
değiştirilebilir.
Araç çubuklarında değil, menülerde görünen komutlar için geçerlidir. Üst düzey araç çubuğu öğeleri, yönteminden bayrak döndürülürken OLECMDF_INVISIBLE
devre dışı bırakılabilir, ancak gizlenemez QueryStatus
.
Bir menüde bu bayrak, üyeleri gizlendiğinde otomatik olarak gizlenmesi gerektiğini de gösterir. Üst düzey menülerde bu davranış zaten olduğundan bu bayrak genellikle alt menülere atanır.
bayrağıyla DefaultInvisible
birleştirilmelidir.
Geçerli: Button
, Combo
, Menu
NoShowOnMenuController
Bu bayrağı içeren bir komut bir menü denetleyicisinde konumlandırılmışsa, komut açılan listede görünmez.
Geçerli olan: Button
Komut bayrakları hakkında daha fazla bilgi için CommandFlag öğesi belgelerine bakın.
Genel gereksinimler
Komutunuz görüntülenebilmesi ve etkinleştirilmesi için aşağıdaki test serisini geçmelidir:
Komut doğru konumlandırıldı.
Bayrak
DefaultInvisible
ayarlanmadı.Üst menü veya araç çubuğu görünür.
VisibilityConstraints öğesi bölümündeki bir bağlam girdisi nedeniyle komut görünmez.
Arabirimi uygulayan IOleCommandTarget VSPackage kodu, komutunuzu görüntüler ve etkinleştirir. Hiçbir arabirim kodu araya girip üzerinde işlem yapmamış.
Kullanıcı komutunuza tıkladığında, yönlendirme algoritmasında özetlenen yordama tabi olur.
Önceden tanımlanmış komutları çağırma
UsedCommands öğesi, VSPackage'ların diğer VSPackage'lar veya IDE tarafından sağlanan komutlara erişmesini sağlar. Bunu yapmak için, kullanılacak komutun GUID'sine ve kimliğine sahip bir UsedCommand öğesi oluşturun. Bu, komutun geçerli Visual Studio yapılandırmasının bir parçası olmasa bile Visual Studio tarafından yüklenmesini sağlar. Daha fazla bilgi için bkz . UsedCommand öğesi.
Arabirim öğesi görünümü
Komut öğelerini seçme ve konumlandırma konusunda dikkat edilmesi gerekenler şunlardır:
Visual Studio, yerleştirmeye bağlı olarak farklı görünen birçok kullanıcı arabirimi öğesi sunar.
bayrağı kullanılarak tanımlanan bir UI öğesi, yönteminin
DefaultInvisible
VSPackage uygulaması QueryStatus tarafından görüntülenmediği veya bölümdeki belirli bir kullanıcı arabirimi bağlamıyla ilişkilendirilmediği sürece IDE'deVisibilityConstraints
görüntülenmez.Başarıyla konumlandırılmış bir komut bile görüntülenmeyebilir. Bunun nedeni, VSPackage'ın uyguladığı (veya uygulamadığı) arabirimlere bağlı olarak IDE'nin bazı komutları otomatik olarak gizlemesi veya görüntülemesidir. Örneğin, VSPackage'ın bazı derleme arabirimlerini uygulaması, derlemeyle ilgili menü öğelerinin otomatik olarak gösterilmesine neden olur.
UI öğesinin
CommandWellOnly
tanımında bayrağın uygulanması, komutun yalnızca özelleştirme yoluyla eklenebileceği anlamına gelir.Komutlar yalnızca belirli kullanıcı arabirimi bağlamlarında, örneğin, yalnızca IDE tasarım görünümündeyken bir iletişim kutusu görüntülendiğinde kullanılabilir.
IDE'de belirli kullanıcı arabirimi öğelerinin görüntülenmesine neden olmak için bir veya daha fazla arabirim uygulamanız veya kod yazmanız gerekir.