Hinzufügen von Befehlen und Bewegungen zu Ebenendiagrammen
Mit diesem Visual Studio 2010 Feature Pack können Sie Ebenendiagramme in Visual Studio 2010 Ultimate erweitern, indem Sie Kontextmenübefehls- und Gestenhandler definieren. Sie können diese Erweiterungen in einer Visual Studio-Integrationserweiterung (VSIX) verpacken, die Sie an andere Visual Studio Ultimate-Benutzer verteilen können. Weitere Informationen finden Sie unter Visual Studio Feature Packs.
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.
Tipp
Wenn Sie eine benutzerdefinierte architektonische Validierungsmethode definieren möchten, sollten Sie sie 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
Anforderungen und Installationsanweisungen finden Sie unter Anforderungen in Erstellen von Erweiterungen für Ebenendiagramme.
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.
Tipp
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.
Fügen Sie in source.extension.vsixmanifest unter Inhalt das Befehls- oder Gestenhandlerprojekt als MEF-Komponente hinzu.
Klicken Sie auf Inhalt hinzufügen.
Wählen Sie für Inhaltstyp auswählen die Option MEF-Komponente aus.
Klicken Sie in Quelle auswählen auf Projekt, und wählen Sie den Namen des Befehls- oder Gestenhandlerprojekts aus.
Speichern Sie die Datei.
Klicken Sie unter Verweise auf Verweis hinzufügen, und wählen Sie dann die Laufzeit für dieses Feature Pack aus.
Kehren Sie zum Befehls- oder Gestenhandlerprojekt zurück, und fügen Sie die folgenden Projektverweise hinzu.
Verweise |
Optionen |
---|---|
Wenn Sie Visual Studio 2010 Visualization and Modeling Feature Pack installiert haben: %LocalAppData%\Microsoft\VisualStudio\10.0\Extensions\Microsoft\Visualization and Modeling Feature Pack Runtime\1.0\Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer.dll
Hinweis
%LocalAppData% ist in der Regel DriveName:\Users\UserName\AppData\Local.Verwenden Sie unter Windows XP oder Windows 2003 %APPDATA% statt %LocalAppData%.
Wenn Sie Visual Studio 2010 Feature Pack 2 installiert haben: …\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Visualization and Modeling Feature Pack Runtime\1.0\Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer.dll |
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.10.0 |
Definieren von Modellierungserweiterungen |
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.10.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.
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.ArchitectureTools.Extensibility.Uml;
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
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.ArchitectureTools.Extensibility.Uml;
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 ein ShapeElement. Sie können dieses in ein IShape konvertieren, das ein zweckmäßigerer Wrapper für die Modellierung ist:
IShape ishape = targetElement.CreateIShape(); if (ishape is IDiagram) { ... } else { ILayerElement layerElement = s.GetLayerElement(); ... }
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 Handlers für Ablagevorgänge und Doppelklicks in einem Modellierungsdiagramm.
Siehe auch
Weitere Ressourcen
Navigieren in und Aktualisieren von Ebenenmodellen im Programmcode
Hinzufügen einer benutzerdefinierten Architekturüberprüfung zu Ebenendiagrammen
Gewusst wie: Definieren und Installieren einer Modellierungserweiterung
Änderungsprotokoll
Datum |
Versionsgeschichte |
Grund |
---|---|---|
Dezember 2010 |
Aktualisiert für Visual Studio 2010 Feature Pack 2. |
Informationsergänzung. |