Hinzufügen von Befehlen und Bewegungen zu Ebenendiagrammen
Sie können Kontextmenübefehlen und -Gestenhandler in Ebenendiagrammen Visual Studio Ultimate definieren.Sie können diese Erweiterungen in einer Visual Studio-Integrationserweiterung (VSIX) verpacken, die Sie an andere Visual Studio-Benutzer verteilen können.
Sie können mehrere Befehls- und Gestenhandler im gleichen Visual Studio-Projekt definieren.Sie können auch mehrere Projekte dieser Art in einer VSIX kombinieren.Sie könnten z. B. eine einzelne VSIX definieren, die Ebenenbefehle, eine domänenspezifische Sprache und Befehle für UML-Diagramme einschließt.
Hinweis |
---|
Sie können Architekturvalidierung auch anpassen, in der der Quellcode der Benutzer mit Ebenendiagrammen verglichen wird.Sie sollten Architekturvalidierung in einem separaten Visual Studio-Projekt definieren.Sie können sie der gleichen VSIX hinzufügen wie anderen Erweiterungen.Weitere Informationen finden Sie unter Hinzufügen einer benutzerdefinierten Architekturüberprüfung zu Ebenendiagrammen. |
Anforderungen zum Erstellen von Ebenenerweiterungen
Auf dem Computer, auf dem Sie die Ebenenerweiterungen entwickeln möchten, muss Folgendes installiert sein:
Visual Studio Ultimate
SDK von Visual Studio
Visualisierungs- und Modellierungs-SDK
Definieren eines Befehls oder einer Geste in einer neuen VSIX
Projektvorlagen stellen die schnellste Methode dar, eine Erweiterung zu erstellen.Dabei werden der Code und die VSIX im selben Projekt platziert.
So definieren Sie mithilfe einer Projektvorlage eine Erweiterung
Erstellen Sie in einer neuen Projektmappe ein Projekt. Verwenden Sie dazu den Befehl Neues Projekt im Menü Datei.
Wählen Sie im Dialogfeld Neues Projekt unter Modellierungsprojekte entweder Layer Designer Command Extension (Ebenen-Designer - Befehlserweiterung) oder Layer Designer Command Extension (Ebenen-Designer - Gestenerweiterung) aus.
Mit dieser Vorlage wird ein Projekt mit einem kleinen Arbeitsbeispiel erstellt.
Drücken Sie STRG+F5 oder F5, um die Erweiterung zu testen.
Eine experimentelle Instanz von Visual Studio wird gestartet.Erstellen Sie in dieser Instanz ein Ebenendiagramm.Der Befehl oder die Gestenerweiterung sollte in diesem Diagramm funktionieren.
Schließen Sie die experimentelle Instanz, und ändern Sie den Beispielcode.Weitere Informationen finden Sie unter Navigieren in und Aktualisieren von Ebenenmodellen im Programmcode.
Sie können dem gleichen Projekt mehrere Befehls- oder Gestenhandler hinzufügen.Weitere Informationen finden Sie in einem der folgenden Abschnitte:
Definieren eines Menübefehls
Definieren eines Gestenhandlers
Um die Erweiterung in der Hauptinstanz von Visual Studio oder auf einem anderen Computer zu installieren, suchen Sie die Datei .vsix im Ordner bin\*.Kopieren Sie die Datei auf den Computer, auf dem Sie sie installieren möchten, und doppelklicken Sie dann darauf.Verwenden Sie Erweiterungs-Manager im Menü Extras zum Deinstallieren der Datei.
Hinzufügen eines Befehls oder einer Geste zu einem separaten VSIX
Wenn Sie eine VSIX erstellen möchten, die Befehle, Ebenenvalidierungssteuerelemente und andere Erweiterungen enthält, empfiehlt es sich, ein Projekt zum Definieren der VSIX und getrennte Projekte für die Handler zu erstellen.Informationen zu anderen Modellerweiterungstypen finden Sie unter Erweitern von UML-Modellen und Diagrammen.
So fügen Sie einer separaten VSIX Ebenenerweiterungen hinzu
Erstellen Sie in einer neuen oder vorhandenen Visual Studio Ultimate-Projektmappe ein Klassenbibliotheksprojekt.Klicken Sie im Dialogfeld Neues Projekt auf Visual C#, und klicken Sie dann auf Klassenbibliothek.Dieses Projekt enthält Befehls- oder Gestenhandlerklassen.
Hinweis Sie können mehrere Befehls- oder Gestenhandlerklassen in einer Klassenbibliothek definieren, jedoch sollten Sie Ebenenvalidierungsklassen in einer separaten Klassenbibliothek definieren.
Identifizieren oder erstellen Sie ein VSIX-Projekt in der Projektmappe.Ein VSIX-Projekt enthält eine Datei mit dem Namen source.extension.vsixmanifest.So fügen Sie ein VSIX-Projekt:
Erweitern Sie im Dialogfeld Neues Projekt den Knoten Visual C#, und klicken Sie auf Erweiterungen und anschließend auf VSIX Project.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das VSIX-Projekt, und klicken Sie anschließend auf Als Startprojekt festlegen.
Klicken Sie auf Editionen auswählen, und stellen Sie sicher, dass Visual Studio Ultimate überprüft wird.
In source.extension.vsixmanifest unter Objekte, fügen Sie den das Befehls- oder Gestenhandlerprojekt als MEF-Komponente hinzu.
Im Objekte.tab, wählen Sie Neu aus.
Bei Typ ausgewähltes Microsoft.VisualStudio.MefComponent.
Bei Quelle wählen ausgewähltes Projekt in der aktuellen Projektmappe und den Namen des Befehls oder Gestenhandlerprojekts aus.
Speichern Sie die Datei.
Kehren Sie zum Befehls- oder Gestenhandlerprojekt zurück, und fügen Sie die folgenden Projektverweise hinzu.
Verweis |
Optionen |
---|---|
Programme \ " Microsoft Visual Studio 11.0 Common7 \ IDE Erweiterungen Microsoft \ \ \ \ \ Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer.dll ExtensibilityRuntime Architektur-Tools |
Erstellen und Bearbeiten von Ebenen |
Microsoft.VisualStudio.Uml.Interfaces |
Erstellen und Bearbeiten von Ebenen |
Microsoft.VisualStudio.ArchitectureTools.Extensibility |
Ändern von Formen in Diagrammen |
System.ComponentModel.Composition |
Definieren von Komponenten mit Managed Extensibility Framework (MEF) |
Microsoft.VisualStudio.Modeling.Sdk.11.0 |
Definieren von Modellierungserweiterungen |
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.11.0 |
Aktualisieren von Formen und Diagrammen |
Bearbeiten Sie die Klassendatei im C#-Klassenbibliotheksprojekt so, dass sie den Code für die Erweiterung enthält.Weitere Informationen finden Sie in einem der folgenden Abschnitte:
Definieren eines Menübefehls
Definieren eines Gestenhandlers
Siehe auch Navigieren in und Aktualisieren von Ebenenmodellen im Programmcode.
Drücken Sie STRG+F5 oder F5, um die Anwendung zu testen.Eine experimentelle Instanz von Visual Studio wird geöffnet.Erstellen oder öffnen Sie ein Ebenendiagramm in dieser Instanz.
Um die Erweiterung in der Hauptinstanz von Visual Studio oder auf einem anderen Computer zu installieren, suchen Sie die Datei .vsix im Verzeichnis bin des VSIX-Projekts.Kopieren Sie die Datei auf den Computer, auf dem Sie die VSIX installieren möchten.Doppelklicken Sie in Windows-Explorer auf die VSIX-Datei (Datei-Explorer in Windows 8).
Verwenden Sie Erweiterungs-Manager im Menü Extras zum Deinstallieren der Datei.
Definieren eines Menübefehls
Sie können einer vorhandenen Geste oder einem Befehlsprojekt mehrere Menübefehlsdefinitionen hinzufügen.Jeder Befehl wird von einer Klasse definiert, die über die folgenden Eigenschaften verfügt:
Die Klasse wird folgendermaßen deklariert:
[LayerDesignerExtension]
[Export(typeof(ICommandExtension))]
public class MyLayerCommand : ICommandExtension { ... }
Der Namespace und der Name der Klasse sind unwichtig.
ICommandExtension wird mit den folgenden Methoden implementiert:
string Text {get;} - Die Bezeichnung, die im Menü angezeigt wird.
void QueryStatus(IMenuCommand command) - Wird aufgerufen, wenn der Benutzer mit der rechten Maustaste auf das Diagramm klickt, und bestimmt, ob der Befehl für die aktuelle Auswahl des Benutzers sichtbar und aktiviert ist.
void Execute(IMenuCommand command) - Wird aufgerufen, wenn der Benutzer den Befehl auswählt.
Sie können IDiagramContext importieren, um die aktuelle Auswahl zu bestimmen:
[Import]
public IDiagramContext DiagramContext { get; set; }
...
DiagramContext.CurrentDiagram.SelectedShapes.Count()...
Weitere Informationen finden Sie unter Navigieren in und Aktualisieren von Ebenenmodellen im Programmcode.
Erstellen Sie zum Hinzufügen eines neuen Befehls eine neue Codedatei, die das folgende Beispiel enthält.Testen und bearbeiten Sie das Beispiel dann.
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();
}
}
}
}
Definieren eines Gestenhandlers
Ein Gestenhandler reagiert, wenn der Benutzer Elemente in das Ebenendiagramm ziehen und wenn der Benutzer auf eine beliebige Stelle im Diagramm doppelklickt.
Sie können dem vorhandenen Befehls- oder Gestenhandler-VSIX-Projekt eine Codedatei hinzufügen, die einen Gestenhandler definiert:
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
{
}
}
Beachten Sie die folgenden Punkte zu Gestenhandlern:
IGestureExtension umfasst folgende Member:
OnDoubleClick - Wird aufgerufen, wenn der Benutzer auf eine beliebige Stelle im Diagramm doppelklickt.
CanDragDrop - Wird wiederholt aufgerufen, wenn der Benutzer beim Ziehen eines Elements in das Diagramm die Maus bewegt.Das muss schnell funktionieren.
OnDragDrop - Wird aufgerufen, wenn der Benutzer ein Element im Diagramm ablegt.
Das erste Argument für jede Methode ist IShape, aus denen Sie das Ebenenelement abrufen können.Beispiele:
public void OnDragDrop(IShape target, IDataObject data) { ILayerElement element = target.GetLayerElement(); if (element is ILayer) { // ... } }
Handler für einige Typen von gezogenen Elementen sind bereits definiert.Der Benutzer kann z. B. Elemente aus dem Projektmappen-Explorer in ein Ebenendiagramm ziehen.Sie können keinen Ziehhandler für diese Elementtypen definieren.In diesen Fällen werden die DragDrop-Methoden nicht aufgerufen.
Weitere Informationen dazu, wie andere Elemente decodiert werden, wenn sie in das Diagramm gezogen werden, finden Sie unter Gewusst wie: Definieren eines Gestenhandlers in einem Modellierungsdiagramm.
Siehe auch
Konzepte
Navigieren in und Aktualisieren von Ebenenmodellen im Programmcode
Hinzufügen einer benutzerdefinierten Architekturüberprüfung zu Ebenendiagrammen
Gewusst wie: Definieren und Installieren einer Modellierungserweiterung