Postup: definování příkazu nabídky diagramu modelování
V aplikaci Visual Studio Ultimate můžete definovat další položky v místních nabídkách diagramu UML.Můžete určit, zda se zobrazí příkaz nabídky a je povoleno v místní nabídce jakýkoli prvek v diagramu a můžete napsat kód, který se spustí, když uživatel vybere položku nabídky.Tato rozšíření lze balíček do rozšíření integrace aplikace Visual Studio (VSIX) a distribuovat ostatním uživatelům aplikace Visual Studio.
Požadavky
Visual Studio SDK, která lze získat od Visual Studio Galerie.
Visual Studio vizualizaci a modelování SDK, která lze získat od Visual Studio vizualizaci a modelování SDK na kód Galerie.
Definování příkazu nabídky
Příkaz nabídky UML designer vytvoříte třídy, která definuje chování příkazu vytvořit a vložit třídy v aplikace Visual Studio integrace rozšíření (VSIX).VSIX chová jako kontejner, můžete příkaz nainstalovat.Existují dvě alternativní metody definování příkazu nabídky:
Vytvořte příkaz nabídky ve vlastním VSIX pomocí šablony projektu. To je rychlejší metodu.Pokud nechcete kombinovat s jinými typy rozšíření, například ověření rozšíření, položky vlastního panelu nástrojů nebo obslužné rutiny gesto příkazů nabídky použijte.
Vytvořte samostatný příkaz a VSIX projekty. Tuto metodu použijte, pokud chcete sloučit několik typů rozšíření do stejné VSIX.Například pokud váš příkaz očekává modelu dodržovat zvláštní omezení, může vložení do stejného VSIX jako metoda ověřování.
Vytvořit příkaz nabídky ve vlastní VSIX
V Nový projekt dialogovém okně vyberte v seznamu Projektů pro modelování, vyberte Rozšíření příkazu.
Otevřít .cs soubor v novém projektu a upravit CommandExtension třídy k provedení příkazu.
Další informace naleznete v tématu provádění příkazu nabídky.
Definováním nových tříd můžete přidat další příkazy do tohoto projektu.
Příkaz test stisknutím klávesy F5.Další informace naleznete v tématu provádění příkazu nabídky.
Příkaz nabídky jiného počítače nainstalovat zkopírováním souboru bin\*\*.vsix je sestavena projektu.Další informace naleznete v tématu příkaz instalace.
Zde je alternativní postup:
V projektu knihovny (DLL) samostatné třídy vytvořit příkaz nabídky
Vytvoření projektu knihovna tříd v nové řešení Visual Studio nebo v existující řešení.
Na soubor nabídce zvolte Nový, projektu.
Podle Nainstalované šablony, vyberte Visual C# nebo jazyka Visual Basic.V prostředním sloupci zvolte Knihovna tříd.
Nastavit roztok označte, zda chcete vytvořit nové řešení nebo přidání komponenty řešení VSIX, které jste již otevřeli.
Nastavíte projekt název a umístění a klepněte na tlačítko OK.
Následující odkazy do projektu přidáte.
Odkaz
Co můžete dělat
System.ComponentModel.Composition
Definovat pomocí součásti Spravované rozšiřitelnosti Framework (MEF).
Microsoft.VisualStudio.UML.Interfaces
Číst a měnit vlastnosti prvků modelu.
Microsoft.VisualStudio.ArchitectureTools.Extensibility
Vytvořit prvky modelu, měnit tvary v diagramech.
Microsoft.VisualStudio.Modeling.SDK.11.0
Definujte model zpracování událostí.
Zapouzdření sérii změn do modelu.Další informace naleznete v tématu Jak: aktualizace modelu odkaz pomocí transakcí.
Microsoft.VisualStudio.Modeling.SDK.Diagrams.11.0
(není vždy nutné)
Přístup prvků diagramu další tah obslužné rutiny.
Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer
Požadováno pouze pro příkazy na diagramy vrstvy.Další informace naleznete v tématu Rozšíření diagramy vrstvy.
Definujte příkazů vrstvy diagramu.
Přidat soubor třídy do projektu a jeho obsahu nastavena na následující kód.
[!POZNÁMKA]
Změnit obor názvů a název třídy hodnotu vrácenou Text na předvolbu.
Pokud definujete více příkazů, zobrazí se v nabídce v abecedním pořadí názvů tříd.
using System.ComponentModel.Composition; using System.Linq; using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation; using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml; using Microsoft.VisualStudio.Modeling.ExtensionEnablement; using Microsoft.VisualStudio.Uml.AuxiliaryConstructs; using Microsoft.VisualStudio.Uml.Classes; // ADD other UML namespaces if required namespace UMLmenu1 // CHANGE { // DELETE any of these attributes if the command // should not appear in some types of diagram. [ClassDesignerExtension] [ActivityDesignerExtension] [ComponentDesignerExtension] [SequenceDesignerExtension] [UseCaseDesignerExtension] // [LayerDesignerExtension] // All menu commands must export ICommandExtension: [Export (typeof(ICommandExtension))] // CHANGE class name – determines order of appearance on menu: public class Menu1 : ICommandExtension { [Import] public IDiagramContext DiagramContext { get; set; } public void QueryStatus(IMenuCommand command) { // Set command.Visible or command.Enabled to false // to disable the menu command. command.Visible = command.Enabled = true; } public string Text { get { return "MENU COMMAND LABEL"; } } public void Execute(IMenuCommand command) { // A selection of starting points: IDiagram diagram = this.DiagramContext.CurrentDiagram; foreach (IShape<IElement> shape in diagram.GetSelectedShapes<IElement>()) { IElement element = shape.Element; } IModelStore modelStore = diagram.ModelStore; IModel model = modelStore.Root; foreach (IElement element in modelStore.AllInstances<IClass>()) { } } } }
Další informace o tom, co do metod naleznete provádění příkazu nabídky.
Příkaz nabídky je nutné přidat do projektu VSIX, který slouží jako kontejner pro příkaz pro instalaci.Pokud chcete, můžete zahrnout další součásti stejného VSIX.
Chcete-li přidat příkaz nabídky projektu VSIX
Tento postup není nutné vytvořený příkaz nabídky s vlastním VSIX.
Vytvoření projektu VSIX, pokud vaše řešení již jeden má.
V Aplikaci Solution Explorer, zvolte v místní nabídce roztoku Přidat, Nový projekt.
Podle Nainstalované šablony, rozbalte položku Visual C# nebo jazyka Visual Basic, pak zvolte rozšíření.V prostředním sloupci zvolte VSIX projektu.
V aplikaci Solution Explorer v místní nabídce VSIX projektu, zvolte nastavit jako spuštění projektu.
Otevřete source.extension.vsixmanifest.
Na metadat karta, nastavit název VSIX.
Na Cíle nainstalovat karta, Premium a Visual Studio Ultimate nastavit jako cíle.
Na majetku vyberte Novýa v dialogovém okně nastavit:
Typ = MEF komponenty
Zdroj = projektu v aktuální řešení
Projekt = projektu knihovny třídy
Provádění příkazu nabídky
Implementuje třída příkaz nabídky požadované metody pro ICommandExtension.
string Text { get; } |
Výsledkem popisek položky nabídky. |
void QueryStatus(IMenuCommand command); |
Volána, když uživatel klepne v diagramu. Tato metoda neměla změnit model. Použití DiagramContext.CurrentDiagram.SelectedShapes určit, zda chcete příkaz zobrazit a povolena. Nastavte:
|
void Execute (IMenuCommand command); |
Pokud je viditelný a povolený nazývá po klepnutí na položku do nabídky.
|
Přístupu k modelu v kódu
V nabídce příkaz třídy včetně následující prohlášení:
[Import] public IDiagramContext DiagramContext { get; set; }
...
Prohlášení o IDiagramContext umožňuje psát kód své metody, které přistupuje k diagramu, aktuální výběr a model:
IDiagram diagram = this.DiagramContext.CurrentDiagram;
foreach (IShape<IElement> shape in diagram.GetSelectedShapes<IElement>())
{ IElement element = shape.Element; ... }
IModelStore modelStore = diagram.ModelStore;
IModel model = modelStore.Root;
foreach (IElement element in modelStore.AllInstances<IUseCase>()) {...}
Navigace a aktualizace modelu
Prvky modelu UML jsou k dispozici prostřednictvím rozhraní API.Z aktuálního výběru nebo kořenové lokalitě modelu můžete použít všechny ostatní prvky.Další informace naleznete v tématu Jak: navigace modelu UML a Programování v rozhraní API UML.
Pokud se zabývají sekvenčního diagramu, viz také Postup: úprava sekvenční diagramy pomocí rozhraní API UML.
Rozhraní API umožňuje také změnit vlastnosti prvků, prvky a vztahy odstranit a vytvořit nové prvky a vztahy.
Ve výchozím nastavení každé změny provedené ve způsobu spouštění bude proveden v samostatných transakcí.Uživatel bude moci vrátit jednotlivé změny samostatně.Pokud chcete seskupit změny do jediné transakce, ILinkedUndoTransaction podle Jak: aktualizace modelu odkaz pomocí transakcí.
Použít uživatelské rozhraní pro aktualizace
V některých případech může být užitečné provést aktualizace modelu z podprocesem na pozadí.Například příkaz načte data z pomalé zdrojů, můžete provádět nakládky v podprocesu brackground tak, aby uživatel zobrazit změny jsou v průběhu a pokud je nezbytné zrušit operaci.
Však měli být vědomi, úložiště modelu není bezpečné podprocesy.Vždy by aktualizace pomocí uživatelského rozhraní (UI) podprocesu a pokud je to možné, zabránit uživatelům v provádění úprav probíhá operace pozadí.Příklad naleznete v tématu Jak: aktualizace modelu UML z podprocesem na pozadí.
Provádění příkazu nabídky
Pro testovací účely spusťte příkaz v režimu ladění.
Testovat příkaz nabídky
Stiskněte klávesu F5, nebo ladění nabídce zvolte Spustit ladění.
Experimentální výskyt Visual Studio spustí.
Poradce při potížích s: Pokud nový Visual Studio nelze spustit:
Pokud máte více než jeden projekt, nastavte VSIX projektu je projekt spuštění roztoku.
V aplikaci Solution Explorer v místní nabídce po spuštění nebo pouze projekt zvolte Vlastnosti.V editoru vlastností projektu, vyberte ladění kartu.Zkontrolujte, zda řetězec v spustit externí program pole je úplná cesta Visual Studio, obvykle:
C:\Program Files\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe
Experimentální v Visual Studio, otevření nebo vytvoření projektu modelování a otevření nebo vytvoření diagramu modelu.Pomocí diagramu, ke kterému patří typy, které jsou uvedeny v atributy třídy příkazu nabídky.
Otevření místní nabídky kdekoli v diagramu.V nabídce zobrazí váš příkaz.
Poradce při potížích s: Pokud příkaz v nabídce nezobrazí, zkontrolujte, zda:
Příkaz nabídky projektu je uveden jako součást MEF v majetku karta v source.extensions.manifest VSIX projektu.
Parametry Import a Export jsou platné atributy.
QueryStatus Metoda není nastavení command.Enabled or Visible fields to false.
Typ diagramu modelu, kterou používáte (třída UML, pořadí a podobně) je uveden jako jeden z atributů třídy příkazu nabídky [ClassDesignerExtension], [SequenceDesignerExtension] a podobně.
Instalace a odinstalace rozšíření
Můžete nainstalovat Visual Studio rozšíření ve vašem počítači i v jiných počítačích.
Instalace rozšíření
V počítači, vyhledejte .vsix soubor, který byl vytvořen společností VSIX projektu.
V Aplikaci Solution Explorer, zvolte v místní nabídce projektu VSIX Otevřené složky v programu Průzkumník Windows.
Vyhledejte soubor bin\*\YourProject.vsix
Kopie .vsix soubor v cílovém počítači, do kterého chcete nainstalovat rozšíření.To může být v počítači nebo jiný.
Cílový počítač musí mít jednu z edice Visual Studio zadaný v source.extension.vsixmanifest.
V cílovém počítači otevřete .vsix souboru, například poklepáním.
Visual Studio rozšíření instalační otevře a nainstaluje rozšíření.
Spuštění nebo restartování Visual Studio.
Odinstalujte rozšíření
Na Nástroje nabídce zvolte Extension Manager.
Rozbalte instalaci rozšíření.
Vyberte rozšíření a pak zvolte Odinstalace.
Zřídka chybná rozšíření načtena a vytvoří sestavu v okně chybové, ale nezobrazí Extension Manager.V takovém případě můžete odebrat rozšíření odstraněním ze souboru:
% LocalAppData %\Local\Microsoft\VisualStudio\11.0\Extensions
Příklad
Následující příklad zobrazuje kód pro příkaz nabídky, která bude interchange názvy dvou prvků diagramu třídy.Tento kód musí být vytvořeny Visual Studio rozšíření projektu a nainstalován, popsané v předchozích částech.
using System.Collections.Generic; // for IEnumerable
using System.ComponentModel.Composition;
// for [Import], [Export]
using System.Linq; // for IEnumerable extensions
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation;
// for IDiagramContext
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml;
// for designer extension attributes
using Microsoft.VisualStudio.Modeling.Diagrams;
// for ShapeElement
using Microsoft.VisualStudio.Modeling.ExtensionEnablement;
// for IGestureExtension, ICommandExtension, ILinkedUndoContext
using Microsoft.VisualStudio.Uml.Classes;
// for class diagrams, packages
/// <summary>
/// Extension to swap names of classes in a class diagram.
/// </summary>
namespace SwapClassNames
{
// Declare the class as an MEF component:
[Export(typeof(ICommandExtension))]
[ClassDesignerExtension]
// Add more ExportMetadata attributes to make
// the command appear on diagrams of other types.
public class NameSwapper : ICommandExtension
{
// MEF required interfaces:
[Import]
public IDiagramContext Context { get; set; }
[Import]
public ILinkedUndoContext LinkedUndoContext { get; set; }
/// <summary>
/// Swap the names of the currently selected elements.
/// </summary>
/// <param name="command"></param>
public void Execute(IMenuCommand command)
{
// Get selected shapes that are IClassifiers -
// IClasses, IInterfaces, IEnumerators.
var selectedShapes = Context.CurrentDiagram
.GetSelectedShapes<IClassifier>();
if (selectedShapes.Count() < 2) return;
// Get model elements displayed by shapes.
IClassifier firstElement = selectedShapes.First().Element;
IClassifier lastElement = selectedShapes.Last().Element;
// Do the swap in a transaction so that user
// cannot undo one change without the other.
using (ILinkedUndoTransaction transaction =
LinkedUndoContext.BeginTransaction("Swap names"))
{
string firstName = firstElement.Name;
firstElement.Name = lastElement.Name;
lastElement.Name = firstName;
transaction.Commit();
}
}
/// <summary>
/// Called by Visual Studio to determine whether
/// menu item should be visible and enabled.
/// </summary>
public void QueryStatus(IMenuCommand command)
{
int selectedClassifiers = Context.CurrentDiagram
.GetSelectedShapes<IClassifier>().Count();
command.Visible = selectedClassifiers > 0;
command.Enabled = selectedClassifiers == 2;
}
/// <summary>
/// Name of the menu command.
/// </summary>
public string Text
{
get { return "Swap Names"; }
}
}
}
Viz také
Koncepty
Postup: definovat a nainstalujte rozšíření modelování
Rozšíření modelů UML a diagramů
Postup: definovat speciální tah pro modelování diagramu
Postup: definovat vlastní položku sady nástrojů pro modelování
Postup: definovat omezení ověření pro modely UML
Postup: úprava sekvenční diagramy pomocí rozhraní API UML
Programování v rozhraní API UML