Visual Studio komutları ekleme
Sınıfı tarafından Command
temsil edilen komut, kullanıcı tarafından başlatılabilir bir eylemdir; örneğin, kullanıcı bir menü öğesi seçtiğinde, bir araç çubuğu düğmesine bastığında veya klavye kısayolu yazarken. Komutlar bir görünen ada, eylemi gerçekleştiren bir yürütme yöntemine (ExecuteCommandAsync
), komutu tanımlamak için araç çubuğunda görüntüleme simgesine ve komutu kullanıcıya açıklamaya yönelik bir araç ipucuna sahiptir. Komutlar çeşitli koşullara bağlı olarak etkinleştirilebilir veya devre dışı bırakılabilir.
Yeni Genişletilebilirlik Modeli'ndeki komutlar zaman uyumsuz olarak çalıştırılır, böylece komutlar yürütülürken kullanıcı IDE ile etkileşime devam edebilir.
Komutlarla çalışma
Bu genel bakış, komutlarla çalışmaya yönelik şu en önemli senaryoları kapsar:
- Komut oluşturma
- IDE'ye komut yerleştirme
- Komuta simge ekleme
- Komuta kısayol ekleme
- Komut yapılandırma
- Komutun görünen adını değiştirme
Komut oluşturma
Yeni Genişletilebilirlik Modeli ile komut oluşturma, temel sınıfı genişletme, sınıfı Command
özniteliğiyle donatma ve özelliğini uygulama CommandConfiguration
ile VisualStudioContribution
başlar.
[VisualStudioContribution]
public class MyCommand : Command
{
/// <inheritdoc />
public override CommandConfiguration CommandConfiguration => new("%MyCommand.DisplayName%");
}
CommandConfiguration sınıfı
sınıfı, CommandConfiguration
tanımanız gereken birkaç parametreye sahiptir:
Parametre | Türü | Zorunlu | Açıklama |
---|---|---|---|
DisplayName |
Diize | Yes | Komutunuzun 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 | Komut ü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 |
Bayraklar | CommandFlags | Hayır | Komutunda ek özellikleri ayarlamak için bayraklar. Bazı seçenekler CanToggle ve CanSelect'tir. Bkz. Komut Bayrakları. |
Yerleşim | CommandPlacement[] | Hayır | Visual Studio'da Command'un üst öğesi olarak kullanılacak mevcut grupları belirtir. Bkz. IDE'ye komut yerleştirme. Yerleştirme olmadan bile, komutunuz Visual Studio Arama özelliği aracılığıyla kullanılabilir olmaya devam eder. Komutlar, uzantınızda tanımlanan Menüler, Araç Çubukları ve Gruplar'a da yerleştirilebilir. |
Icon | CommandIconConfiguration | Hayır | Komutlar kullanıcı arabiriminde yalnızca bir Simge, metin içeren bir Simge veya yalnızca metin olarak görüntülenebilir. Bu özellik, bu simgenin ne olması gerektiğini, varsa nasıl görüntülenmesi gerektiğini yapılandırmaktadır. |
Kısayollar | CommandShortcutConfiguration[] | Hayır | Komutunu yürütmek için kullanılabilecek tuş bileşimleri kümesini tanımlar. Kısayolların kapsamı yalnızca belirli IDE bağlamları için geçerli olacak şekilde daraltılabilir. Bkz. Kısayollar. |
ClientContexts[] | String | Hayır | komutu tarafından istenen istemci bağlamları. Varsayılan olarak Kabuk ve Düzenleyici bağlamları döndürülür. İstemci bağlamı, komutun ilk yürütülürken belirli IDE durumlarının anlık görüntüsüdür. Bu komutlar zaman uyumsuz olarak yürütülürken, bu durum kullanıcının komutu yürütmesi ile çalışan komut işleyicisi arasında değişebilir. bkz. İstemci bağlamları. |
Örnek
ayrıca Command
nesnesini alan VisualStudioExtensibility
bir oluşturucuya (IDE ile iletişime izin veren) ve bir yürütme yöntemi ExecuteCommandAsync
gerekir. Aşağıdaki örnek, hiçbir şey yapmayan genel bir komutun en az uygulamasını sağlar:
[VisualStudioContribution]
public class MyCommand : Command
{
/// <inheritdoc />
public override CommandConfiguration CommandConfiguration => new("%MyCommand.DisplayName%");
public MyCommand(VisualStudioExtensibility extensibility)
: base(extensibility)
{
}
public override Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
}
IDE'ye komut 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 CommandPlacement
özelliği 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.
Komutlar, VSCT aracılığıyla tanımlanan ve Id
grubu belirtilerek Guid
yöntemi kullanılarak CommandPlacement.VsctParent
da yerleştirilebilir.
Aynı grubun üst öğesi olan komutlar, yerleşimlerinin özelliğine göre, aynı yerleşime Priority
sahip diğer komutlara veya menülere göre sıralanır. için CommandPlacement
varsayılan Priority
değerdir 0
ve yöntemi çağrılarakCommandPlacement.WithPriority
, istenen Priority
değer geçirilerek değiştirilebilir.
public override CommandConfiguration CommandConfiguration => new("%MyCommand.DisplayName%")
{
// The command will be parented to a group inside of the "Tools" top level menu,
// a group inside of the "Extensions" top level menu, and the "About" group inside of the "Help" top level menu
Placements = new CommandPlacement[]
{
CommandPlacement.KnownPlacements.ToolsMenu,
CommandPlacement.KnownPlacements.ExtensionsMenu.WithPriority(0x0100),
CommandPlacement.VsctParent(new Guid("{d309f791-903f-11d0-9efc-00a0c911004f}"), id: 0x016B, priority: 0x0801),
},
};
Komuta simge ekleme
Komutlar, komut görünen adına ek olarak veya yerine menü öğelerine simge eklemeyi destekler. Komutunuza simge eklemek için komutunun CommandConfiguration
üzerinde özelliğini ayarlayınIcon
.
CommandIconConfiguration
iki CommandIconConfiguration
parametreye sahiptir:
Parametre | Türü | Zorunlu | Açıklama |
---|---|---|---|
IconName | ImageMoniker | Yes | Özel görüntü ekleme bölümünden sonra eklediğiniz bir resim için özel bir ad kullanabilir veya aşağıdaki gibi bir Visual Studio ImageMoniker'e başvurabilirsinizImageMonikers.KnownValues.AddItem |
Simge Ayarlar | Simge Ayarlar | Yes | Komutun nasıl görüntüleneceğini yapılandırılır. Örneğin IconSettings.IconAndText , simgeyi komutun görünen adının yanında görüntülerken IconSettings.IconOnly , bir araç çubuğunun üst öğesindeyse DisplayName değil yalnızca komutun simgesini gösterir. |
ImageMoniker.KnownValues örneği
public override CommandConfiguration CommandConfiguration => new("%MyCommand.DisplayName%")
{
Icon = new CommandIconConfiguration(ImageMoniker.KnownValues.Extension, IconSettings.IconAndText),
};
Komut simgesi için özel görüntü kullanma
Aşağıdaki adımları izleyerek özel adlarla başvurabileceğiniz özel görüntüler ekleyebilirsiniz:
- Görüntü kaynak dosyalarını desene göre yeniden adlandırın
%Custom Moniker%.*
(örneğin, MyImage.1.png). Aynı takma adla önekli dosyaların tümü, aynı özel takma ad için yedekleme kaynakları olarak kullanılır. İstenen simge boyutuna göre farklı bir kaynak kullanılır.- Örneğin, MyImage.16.16.png (16*16 png), MyImage.20.20.png (20*20 png) ve MyImage.xaml için kaynak
MyImage
olarak kabul edilir. - İstenen simge boyutu 16*16 olduğunda MyImage.16.16.png kullanılır, istenen boyut 20*20 olduğunda MyImage.20.20.png kullanılır, diğer tüm durumlarda MyImage.xaml kullanılır.
- Örneğin, MyImage.16.16.png (16*16 png), MyImage.20.20.png (20*20 png) ve MyImage.xaml için kaynak
- Tüm görüntü kaynak dosyalarını klasörün altına
Images
yerleştirin.- Varsayılan görüntü varlıkları klasörü şeklindedir
Images
, ancak bunu ekleyerek de özelleştirebilirsiniz<ImageAssetsPath>%YourFolder%</ImageAssetsPath>
- Varsayılan görüntü varlıkları klasörü şeklindedir
ImageMoniker.Custom örneği
public override CommandConfiguration CommandConfiguration => new("%MyCommand.DisplayName%")
{
Icon = new CommandIconConfiguration(ImageMoniker.Custom("MyImage"), IconSettings.IconAndText),
};
Kısayollar
Komutlar, belirli bir tuş bileşimi kullanıldığında yürütülecek şekilde yapılandırılabilir. Kısayol bir veya iki akordan oluşur; burada her akor bir ModifierKey
ve bir Key
akordan oluşur. için ModifierKey
olası değerler, yalnızca kısayolun ikinci akorunda kullanıldığında geçerli olan , ControlShift
Shift
Control
, ControlShiftLeftAlt
ve None
None
değerleridir.LeftAlt
Kısayolda her iki akor için de aynı ModifierKey
özelliğin kullanılması gerekmez. Bir Key
akorda kullanılan neredeyse diğer tüm klavye tuşları olabilir.
Visual Studio'da birçok klavye kısayolu zaten kullanılıyor. Yinelenen bağlamaları algılamak zor olduğundan ve öngörülemeyen sonuçlara da neden olabileceğinden, aynı kısayolu birden fazla komuta atamamalısınız. Bu nedenle, bir kısayolu atamadan önce kullanılabilirliğini doğrulamak iyi bir fikirdir.
Kısayol etkinleştirme kısıtlaması
Kısayolu farklı bağlamlarda kullanılabilir hale getirmek için yapılandırmaya bir etkinleştirme kısıtlaması eklenebilir. Bu etkinleştirme kısıtlamaları biçiminde Guid
tanımlanır ve genellikle bir düzenleyiciyle ilgilidir. Bir kısayola etkinleştirme kısıtlaması verildiğinde, yalnızca bu bağlamda kullanılabilir. Örneğin, kısayolu Visual Studio düzenleyicisinde Guid
kullanılabilir hale getirmek için "{5EFC7975-14BC-11CF-9B2B-00AA00573819}" kullanın. Bu durumda, kısayol yalnızca Visual Studio düzenleyicisi odaklandığında kullanılabilir.
Kısayol örneği
public override CommandConfiguration CommandConfiguration => new("%MyCommand.DisplayName%")
{
Shortcuts = new CommandShortcutConfiguration[]
{
new(ModifierKey.LeftAlt, Key.M),
new(ModifierKey.ControlShift, Key.Y, ModifierKey.ControlShift, Key.B),
},
};
Komut yapılandırma
Görünürlüğü ve komutun etkin/devre dışı durumunu yapılandırabilir ve bayrakları kullanarak ek meta veriler ayarlayabilirsiniz.
Görünürlük
Komutun görünürlüğü, komutunun CommandConfiguration
üzerinde özelliği ayarlanarak VisibleWhen
denetlenebilir.
özniteliği, koşulu ve tüm mantığını ve girişlerini birlikte belirten bir dizi bağımsız parametre aracılığıyla bir koşul belirtmeyi destekler. Koşulu belirtmek için, bir parametrede bir ifade belirtirsiniz, başka bir parametredeki ifadede kullanılan bir terim kümesi (dizeler) tanımlarsınız ve üçüncü parametrede değerlendirme sonrasında bu terimlerin hangi değerlerle değiştirilmesi gerekir? İfade, terim ve değerlerin birleşimi kural tabanlı etkinleştirme kısıtlaması olarak adlandırılır ve Kural tabanlı etkinleştirme kısıtlamaları bölümünde tam olarak açıklanmıştır.
Bu özellik yapılandırmanızdan atlanırsa, varsayılan değer komutun her zaman görünür olmasıdır.
Görünürlük örneği
public override CommandConfiguration CommandConfiguration => new("My command")
{
VisibleWhen = ActivationConstraint.ClientContext(ClientContextKey.Shell.ActiveSelectionFileName, @"\.(jpg|jpeg|txt)$"),
};
Etkin/devre dışı durumu
Bir komutun etkin/devre dışı durumu, komutunun CommandConfiguration
üzerinde özelliği ayarlanarak EnabledWhen
denetlenebilir.
Bu yapılandırma türü kural tabanlı etkinleştirme kısıtlaması olarak adlandırılır ve Kural tabanlı etkinleştirme kısıtlamalarını kullanma bölümünde tam olarak açıklanmıştır.
Bu yapılandırma komutunuzdan atlanırsa, varsayılan değer komutun her zaman etkinleştirilmesi içindir. Komut sınıfınızın oluşturucusunda ayar this.DisableDuringExecution = true;
yaparak şu anda yürütülüyorsa, komutunuz otomatik olarak devre dışı bırakılabilir. Bu özelliğin ayarlanması, komut yürütülürken yapılandırma tarafından EnabledWhen
tanımlanan etkin/devre dışı durumunu geçersiz kılar.
Etkin/devre dışı durum örneği
public override CommandConfiguration CommandConfiguration => new("My command")
{
EnabledWhen = ActivationConstraint.ClientContext(ClientContextKey.Shell.ActiveSelectionFileName, @"\.(jpg|jpeg|txt)$"),
};
Geçerli terim değerleri hakkında daha fazla bilgi için bkz . Kural tabanlı etkinleştirme kısıtlamaları.
Komut bayrakları
Komut bayrakları, komutlarınızın çalışma zamanında komutunun sahip olabileceği özel davranışları tanımlamak için kullanılan ek özellikleri tanımlamaya yardımcı olur. Şu anda desteklenen bayraklar şunlardır:
CanToggle
- Ekran okuyucuların komutu düzgün bir şekilde duyurabilmesi için komutun özelliğinin değişebileceğini gösterirIsChecked
. İşlevsel olarak, otomasyon özelliğininIsTogglePatternAvailable
UI öğesi için true döndürmesini sağlar.CanSelect
- Ekran okuyucuların komutu düzgün bir şekilde duyurabilmesi için komutun özelliğinin değişebileceğini gösterirIsChecked
. İşlevsel olarak, otomasyon özelliğininIsSelectionPatternAvailable
UI öğesi için true döndürmesini sağlar.
Komutun görünen adını değiştirme
Bir komutun görünen adı başlangıçta içinde ayarlanmış olsa da CommandConfiguration
(bkz . Komut Oluşturma), komutunuzda özelliği ayarlanarak DisplayName
çalışma zamanında değiştirilebilir. ToolTipText
Özelliği benzer şekilde güncelleştirilebilir.
DisplayName örneğini değiştirme
[VisualStudioContribution]
public class MyCommand : Command
{
/// <inheritdoc />
public override CommandConfiguration CommandConfiguration => new("Initial Display Name");
public MyCommand(VisualStudioExtensibility extensibility)
: base(extensibility)
{
}
public override Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
// Update the command's Display Name
this.DisplayName = "Updated Display Name";
return Task.CompletedTask;
}
}
Sonraki adımlar
- Başlarken bölümündeki proje oluşturma bölümünü izleyin.
- Menüleri ve Araç Çubuklarını yapılandırma belgelerini keşfedin
- Ardından, bir komutla uzantı oluşturmaya daha kapsamlı bir bakış için InsertGuidSample örneğine bakın.
- CommandParentingSample'da bir komutun üst öğesi oluşturma örneğine bakın.