Přidávání příkazů a gest do diagramů vrstev
Můžete definovat příkazy kontextové nabídky a obslužné rutiny gesta v diagramech vrstev v Visual Studio Ultimate.Tato rozšíření můžete zabalit do rozšíření integrace Visual Studio (VSIX), které můžete distribuovat dalším uživatelům Visual Studio.
Můžete definovat několik obslužných rutin příkazů a gest ve stejném projektu Visual Studio, pokud chcete.Můžete také kombinovat několik takových projektů do jednoho souboru VSIX.Můžete například definovat jeden VSIX obsahující příkazy vrstvy, jazyk specifický pro doménu a příkazy pro diagramy UML.
[!POZNÁMKA]
Můžete také přizpůsobit ověřování architektury, při kterém je zdrojový kód uživatele srovnáván s diagramy vrstvy.Architektura ověření by měla být definována v samostatném projektu Visual Studio.Můžete ho přidat ke stejnému souboru VSIX jako jiná rozšíření.Další informace naleznete v tématu Přidání ověření vlastní architektury do diagramů vrstev.
Požadavky pro vytváření rozšíření vrstev
Musíte mít nainstalováno následující v počítači, kde chcete vyvíjet rozšíření vrstvy:
Visual Studio Ultimate
Visual Studio – sada SDK
SDK vizualizace a modelování
Definování příkazu nebo gesta v novém souboru VSIX
Nejrychlejší způsob vytváření rozšíření je použití šablony projektu.To umístí kód a manifest VSIX do stejného projektu.
Definování rozšíření pomocí šablony projektu
Vytvořte projekt v novém řešení pomocí příkazu Nový projekt v nabídce Soubor.
V dialogovém okně nový projekt, v části Modelování projektů vyberte buď Rozšíření příkazu návrháře vrstvy nebo Vrstva rozšíření gesta návrháře.
Šablona vytvoří projekt, který obsahuje malý funkční příklad.
Chcete-li otestovat rozšíření, stiskněte klávesu CTRL + F5 nebo F5.
Spustí se experimentální instance aplikace Visual Studio.V tomto případě vytvořte diagram vrstvy.Vaše rozšíření příkazu nebo gesta by v tomto diagramu mělo fungovat.
Ukončete experimentální instanci a upravte ukázkový kód.Další informace naleznete v tématu Procházení a aktualizace modelů vrstev v programovém kódu.
Můžete přidat další obslužné rutiny příkazu nebo gesta do stejného projektu.Další informace naleznete v jedné z následujících sekcí:
Definování příkazu nabídky
Definování obslužné rutiny gesta
Chcete-li nainstalovat rozšíření v instanci hlavní aplikace Visual Studio nebo v jiném počítači, vyhledejte soubor .vsix ve složce bin\*.Zkopírujte jej do počítače, kam jej chcete nainstalovat, a poklepejte na něj.Chcete-li ho odinstalovat, použijte Správce rozšíření v nabídce Nástroje.
Přidání příkazu nebo gesta do samostatného souboru VSIX
Pokud chcete vytvořit jeden VSIX, který obsahuje příkazy, validátory vrstvy a další rozšíření, doporučujeme vytvořit jeden projekt k definování VSIX a samostatné projekty pro obslužné rutiny.Informace o dalších typech rozšíření modelu naleznete v tématu Rozšiřování modelů a diagramů UML.
Přidání rozšíření vrstvy do samostatného souboru VSIX
Vytvořte projekt knihovny tříd v novém nebo stávajícím řešení Visual Studio Ultimate.V dialogovém okně Nový projekt klikněte na Visual C# a potom klikněte na Knihovna tříd.Tento projekt bude obsahovat třídy obslužných rutin pro příkaz nebo gesto.
[!POZNÁMKA]
Můžete definovat více než jednu třídu příkazu nebo obslužné rutiny gesta v jedné knihovně tříd, ale měli byste definovat třídy ověřování vrstvy v samostatné knihovně tříd.
Určete nebo vytvořte VSIX projekt ve vašem řešení.Projekt VSIX obsahuje soubor s názvem source.extension.vsixmanifest.Přidání projektu VSIX:
V dialogovém okně Nový projekt rozbalte položku Visual C#, potom klikněte na Rozšiřitelnost a Projekt VSIX.
V Průzkumníku řešení klikněte pravým tlačítkem myši na projekt VSIX a klikněte na tlačítko Nastavit jako projekt při spuštění.
Klepněte na tlačítko Vybrat vydání a ujistěte se, že je zaškrtnuto Visual Studio Ultimate.
V source.extension.vsixmanifest, v části Majetek přidejte příkaz nebo projekt obslužné rutiny gesta jako komponentu MEF.
Na kartě Majetek vyberte možnost Nové.
V části Typ vyberte Microsoft.VisualStudio.MefComponent.
V části Zdroj vyberte Projekt v aktuálním řešení a vyberte název příkazu nebo projektu obslužné rutiny gesta.
Uložte soubor.
Vraťte se do projektu obslužné rutiny příkazu nebo gesta a přidejte následující odkazy projektu.
Odkaz |
Co vám to umožňuje provádět |
---|---|
Program Files\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\Architecture Tools\ExtensibilityRuntime\Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer.dll |
Vytvořit a upravit vrstvy |
Microsoft.VisualStudio.Uml.Interfaces |
Vytvořit a upravit vrstvy |
Microsoft.VisualStudio.ArchitectureTools.Extensibility |
Upravit tvary v diagramech |
System.ComponentModel.Composition |
Definovat součásti pomocí Managed Extensibility Framework (MEF). |
Microsoft.VisualStudio.Modeling.Sdk.12.0 |
Definovat rozšíření modelování |
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.12.0 |
Aktualizovat tvary a diagramy |
Upravte soubor třídy v projektu knihovny tříd jazyka C#, aby obsahoval kód pro vaše rozšíření.Další informace naleznete v jedné z následujících sekcí:
Definování příkazu nabídky
Definování obslužné rutiny gesta
Viz také Procházení a aktualizace modelů vrstev v programovém kódu.
Chcete-li otestovat funkci, stiskněte klávesu CTRL + F5 nebo F5.Otevře se experimentální instance Visual Studio.V tomto případě vytvořte nebo otevřete diagram vrstvy.
Chcete-li nainstalovat VSIX v instanci hlavní aplikace Visual Studio nebo v jiném počítači, vyhledejte soubor .vsix ve adresáři bin projektu VSIX.Zkopírujte jej do počítače, kde chcete nainstalovat VSIX.Poklepejte na soubor VSIX v aplikaci Windows Explorer (Průzkumník souborů ve Windows 8).
Chcete-li ho odinstalovat, použijte Správce rozšíření v nabídce Nástroje.
Definování příkazu nabídky
K existujícímu gestu nebo projektu příkazu můžete přidat další definice příkazu nabídky.Každý příkaz je definován třídou, která má následující vlastnosti:
Třída je deklarována následovně:
[LayerDesignerExtension]
[Export(typeof(ICommandExtension))]
public class MyLayerCommand : ICommandExtension { ... }
Obor názvů a název třídy nejsou důležité.
Metody, které implementují ICommandExtension, jsou následující:
string Text {get;}– Popisek, který se zobrazí v nabídce.
void QueryStatus(IMenuCommand command) – volána, když uživatel klepne pravým tlačítkem myši na diagram, a určuje, zda má být příkaz viditelný a povolený pro aktuální výběr uživatele.
void Execute(IMenuCommand command)– volána, když uživatel vybere příkaz.
Chcete-li zjistit aktuální výběr, můžete importovat IDiagramContext:
[Import]
public IDiagramContext DiagramContext { get; set; }
...
DiagramContext.CurrentDiagram.SelectedShapes.Count()...
Další informace naleznete v tématu Procházení a aktualizace modelů vrstev v programovém kódu.
Chcete-li přidat nový příkaz, vytvořte nový soubor kódu, který obsahuje následující ukázku.Potom ho otestujte a upravte.
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation;
using Microsoft.VisualStudio.Modeling.Diagrams.ExtensionEnablement;
using Microsoft.VisualStudio.Modeling.ExtensionEnablement;
using System.ComponentModel.Composition;
using System.Linq;
namespace MyLayerExtension // Change to your preference.
{
// This is a feature for Layer diagrams:
[LayerDesignerExtension]
// This feature is a menu command:
[Export(typeof(ICommandExtension))]
// Change the class name to your preference:
public class MyLayerCommand : ICommandExtension
{
[Import]
public IDiagramContext DiagramContext { get; set; }
[Import]
public ILinkedUndoContext LinkedUndoContext { get; set; }
// Menu command label:
public string Text
{
get { return "Duplicate layers"; }
}
// Called when the user right-clicks the diagram.
// Defines whether the command is visible and enabled.
public void QueryStatus(IMenuCommand command)
{
command.Visible =
command.Enabled = DiagramContext.CurrentDiagram
.SelectedShapes.Count() > 0;
}
// Called when the user selects the command.
public void Execute(IMenuCommand command)
{
// A selection of starting points:
IDiagram diagram = this.DiagramContext.CurrentDiagram;
ILayerModel lmodel = diagram.GetLayerModel();
foreach (ILayer layer in lmodel.Layers)
{ // All layers in model.
}
// Updates should be performed in a transaction:
using (ILinkedUndoTransaction t =
LinkedUndoContext.BeginTransaction("copy selection"))
{
foreach (ILayer layer in
diagram.SelectedShapes
.Select(shape=>shape.GetLayerElement())
.Where(element => element is ILayer))
{
ILayer copy = lmodel.CreateLayer(layer.Name + "+");
// Position the shapes:
IShape originalShape = layer.GetShape();
copy.GetShape().Move(
originalShape.XPosition + originalShape.Width * 1.2,
originalShape.YPosition);
}
t.Commit();
}
}
}
}
Definování obslužné rutiny gesta
Obslužná rutina gesta reaguje, když uživatel přetáhne položky do diagramu vrstvy a při poklepání kamkoli v diagramu.
K existujícímu projektu VSIX obslužné rutiny příkazu nebo gesta můžete přidat soubor kódu, který definuje obslužnou rutinu gesta:
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation;
using Microsoft.VisualStudio.Modeling.Diagrams.ExtensionEnablement;
using Microsoft.VisualStudio.Modeling.ExtensionEnablement;
using System.ComponentModel.Composition;
using System.Linq;
namespace MyLayerExtensions // change to your preference
{
[LayerDesignerExtension]
[Export(typeof(IGestureExtension))]
public class MyLayerGestureHandler : IGestureExtension
{
}
}
Všimněte si následujících informací o obslužných rutinách gest:
Členové IGestureExtension jsou následující:
OnDoubleClick – volána, když uživatel poklepe kdekoli v diagramu.
CanDragDrop – voláno opakovaně, jak uživatel přesouvá ukazatel myši při přetažení položky do diagramu.Musí pracovat rychle.
OnDragDrop – volána, když uživatel přetáhne položku do diagramu.
První argument pro každou metodu je IShape, ze kterého můžete získat prvek vrstvy.Příklad:
public void OnDragDrop(IShape target, IDataObject data) { ILayerElement element = target.GetLayerElement(); if (element is ILayer) { // ... } }
Obslužné rutiny pro některé typy přetažených položek jsou již definovány.Uživatel například může přetáhnout položky z Průzkumníka řešení do diagramu vrstvy.Nelze definovat obslužnou rutinu přetažení pro tyto typy položky.V těchto případech vaše metody DragDrop nebudou vyvolány.
Další informace o dekódování dalších položek při jejich přetažení do diagramu viz Postupy: Definování obslužné rutiny gest v diagramu modelování.
Viz také
Koncepty
Procházení a aktualizace modelů vrstev v programovém kódu