Jak: Definiowanie polecenia Menu na diagramie modelowania
W Visual Studio Ultimate można zdefiniować elementy menu dodatkowych na UML diagram w menu skrótów.Można kontrolować, czy polecenie menu pojawia się i jest włączony do dowolnego elementu na diagramie, w menu skrótów i można napisać kod uruchamiany, gdy użytkownik wybierze element menu.Rozszerzenia te można spakować do Visual Studio Integration Extension (VSIX) i rozpowszechnić go do innych użytkowników programu Visual Studio.
Wymagania
Visual Studio SDK, który można otrzymać od Programu Visual Studio galerii.
Visual Studio, wizualizacji i modelowania SDK, który można otrzymać od Visual Studio wizualizacji i modelowania zestawu SDK w galerii kodu.
Definiowanie polecenia menu
Utworzyć polecenie menu dla projektanta UML, należy utworzyć klasę, która definiuje zachowanie polecenia i osadzić klasy w Visual Studio Integration Extension (VSIX).VSIX działa jako kontener, który można zainstalować polecenia.Istnieją dwie alternatywne metody definiowania polecenia menu:
Utwórz polecenia menu w własnej VSIX przy użyciu szablonu projektu. Jest to metoda szybsza.Użyj, jeśli nie chcesz łączyć z innymi typami rozszerzenie rozszerzeń sprawdzania poprawności, przybornik niestandardowe elementy lub obsługi gestu polecenia z menu.
Utwórz osobne polecenie i projektów VSIX. Metoda ta jest używana, jeśli chcesz połączyć kilka typów rozszerzenia w tym samym VSIX.Na przykład jeśli polecenia menu oczekuje modelu do przestrzegania szczególnych ograniczeń, może go osadzić w tej samej VSIX jako metoda sprawdzania poprawności.
Aby utworzyć polecenie menu w VSIX własnych
W Nowego projektu dialogowe, pod Modelowanie projektów, zaznacz Polecenia rozszerzenie.
Otwórz .cs plik w nowym projekcie i zmodyfikować CommandExtension klasy do wykonania polecenia.
Aby uzyskać więcej informacji, zobacz wykonania polecenia Menu.
Można dodać dodatkowe polecenia do tego projektu przez definiowanie nowych klas.
Test polecenia menu przez naciśnięcie klawisza F5.Aby uzyskać więcej informacji, zobacz wykonywanie polecenia Menu.
Zainstaluj polecenia menu na innym komputerze, kopiując plik bin\*\*.vsix wbudowane w projekcie.Aby uzyskać więcej informacji, zobacz Instalowanie polecenia Menu.
Oto procedura alternatywne:
Aby utworzyć w projekcie biblioteki (DLL) osobnej klasy polecenia menu
Tworzenie projektu biblioteki klas rozwiązania programu Visual Studio, albo w istniejące rozwiązania.
Na pliku menu wybierz Nowy, projektu.
W obszarze Zainstalowane szablonów, zaznacz Visual C# lub programu Visual Basic.W środkowej kolumnie Wybierz Biblioteka klas.
Ustaw roztwór , aby wskazać, czy chcesz utworzyć nowe rozwiązanie lub dodać do roztworu VSIX, która otworzyła już składnik.
Ustawianie projektu nazwy i lokalizacji i kliknij przycisk OK.
Dodaj następujące odwołania do projektu.
Odwołanie
Co to umożliwia
System.ComponentModel.Composition
Definiowanie składniki przy użyciu Framework zarządzanych rozszerzeń (MEF).
Microsoft.VisualStudio.UML.Interfaces
Odczytać i zmienić właściwości elementów modelu.
Microsoft.VisualStudio.ArchitectureTools.Extensibility
Tworzenie elementów modelu, modyfikowanie kształtów na diagramach.
Microsoft.VisualStudio.Modeling.SDK.11.0
Definiowanie model obsługi zdarzeń.
Hermetyzowania serię zmian modelu.Aby uzyskać więcej informacji, zobacz Jak: łącze Aktualizacje modelu przy użyciu transakcji.
Microsoft.VisualStudio.Modeling.SDK.Diagrams.11.0
(nie zawsze jest wymagane)
Elementy diagramu dodatkowe dostępu dla obsługi gestu.
Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer
Wymagane tylko dla poleceń na diagramach warstwy.Aby uzyskać więcej informacji, zobacz Rozszerzanie diagramy warstwy.
Definiowanie poleceń na diagramie warstwy.
Dodaj plik klasy do projektu i ustaw jej zawartość poniższy kod.
[!UWAGA]
Zmienianie obszaru nazw, nazwę klasy i wartości zwracane przez Text zgodnie z wymaganiami.
W przypadku zdefiniowania wielu poleceń pojawiają się w menu w porządku alfabetycznym nazw klas.
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>()) { } } } }
Więcej informacji o tym, co do metod, zobacz wykonania polecenia Menu.
Polecenia menu należy dodać do projektu VSIX, który działa jako kontener dla polecenia instalowania.Można dołączyć inne składniki w tym samym VSIX.
Aby dodać polecenie menu do projektu VSIX
Nie ma potrzeby tej procedury, jeśli utworzono polecenie menu z własnych VSIX.
Tworzenie projektu VSIX, chyba że jeden ma już rozwiązanie.
W Solution Explorer, w menu skrótów roztworu wybierz Dodaj, Nowy projekt.
W obszarze Zainstalowane szablonów, rozwiń Visual C# lub języka Visual Basic, następnie wybierz rozszerzalności.W środkowej kolumnie Wybierz Projektu VSIX.
W oknie Solution Explorer projektu VSIX, w menu skrótów wybierz polecenie jako uruchomienia projektu.
Open source.extension.vsixmanifest.
Na metadanych karcie, należy ustawić nazwę VSIX.
Na Cele zainstalować karta, ustaw Visual Studio Ultimate i premii jako cele.
Na aktywów tab, wybrać Nowyi w oknie dialogowym Ustaw:
Typ = MEF składnika
Źródło = w roztworze bieżącego projektu
Projekt = projektu biblioteki klas
Wykonania polecenia Menu
Klasa polecenia menu implementuje metody wymagane dla ICommandExtension.
string Text { get; } |
Zwraca etykietę elementu menu. |
void QueryStatus(IMenuCommand command); |
Wywołana po kliknięciu na diagramie. Ta metoda nie należy zmieniać modelu. Użyj DiagramContext.CurrentDiagram.SelectedShapes , aby ustalić, czy polecenia pojawiają się i włączone. Zestaw:
|
void Execute (IMenuCommand command); |
Jeśli jest włączony i widoczny, nazywany po kliknięciu danego elementu menu.
|
Dostęp do modelu w kodzie
W klasie polecenia menu, łącznie z następującą deklarację:
[Import] public IDiagramContext DiagramContext { get; set; }
...
Deklaracja IDiagramContext umożliwia pisanie kodu na metody, które uzyskuje dostęp do diagramu, bieżące zaznaczenie i modelu:
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>()) {...}
Przeglądanie i aktualizowanie modelu
Wszystkie dostępne za pośrednictwem interfejsu API są elementy modelu UML.Z bieżącego zaznaczenia lub od głównego modelu można uzyskać dostęp inne elementy.Aby uzyskać więcej informacji, zobacz Jak: Przejdź do modelu UML i Programowanie przy użyciu interfejsu API UML.
Zobacz też jeśli zajmują diagram sekwencji Jak: Edycja diagramy sekwencji za pomocą interfejsu API UML.
Interfejs API pozwala zmienić właściwości elementów i usuwanie elementów i relacje oraz tworzenia nowych elementów i relacje.
Domyślnie każda zmiana w metodę Execute będzie wykonywane w oddzielnych transakcji.Użytkownik będzie można cofnąć zmianę oddzielnie.Jeśli chcesz grupować zmiany w pojedynczą transakcję, użyj ILinkedUndoTransaction zgodnie z opisem w Jak: łącze Aktualizacje modelu przy użyciu transakcji.
Używania dla aktualizacji wątku interfejsu użytkownika
W niektórych przypadkach może być przydatny dokonać aktualizacji do modelu z wątku tła.Na przykład jeśli polecenia powoduje załadowanie danych z zasobów powolne, można wykonać załadunku w wątku brackground tak, że użytkownik może zobaczyć zmiany, gdy są one w toku i anulować operację, jeżeli konieczne jest.
Należy jednak pamiętać, że magazyn modelu nie jest bezpieczne dla wątków.Należy zawsze dokonywać aktualizacji za pomocą wątku interfejsu użytkownika i jeśli jest to możliwe, zapobiec wprowadzeniu zmian w trakcie operacji tła użytkownika.Na przykład, zobacz Jak: Model UML z wątku tła aktualizacji.
Wykonywanie polecenia Menu
Do celów badania wykonanie polecenia w trybie debugowania.
Aby przetestować polecenia menu
Naciśnij F5, lub na debugowania menu wybierz Uruchomić debugowanie.
Wystąpienie doświadczalnych Visual Studio uruchamia.
Rozwiązywanie problemów z: Jeśli nowy Visual Studio nie uruchamia:
Jeśli masz więcej niż jeden projekt, upewnij się, że projekt VSIX jest ustawiona jako projekt uruchamiania roztworu.
W oknie Solution Explorer uruchamiania lub tylko projektu, w menu skrótów wybierz polecenie Właściwości.Edytor właściwości projektu wybierz debugowania kartę.Upewnij się, że ciąg w Start zewnętrzny program pole jest pełna nazwa ścieżki Visual Studio, zazwyczaj:
C:\Program Files\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe
W doświadczalnych Visual Studio, otwórz lub Utwórz projekt modelowania i Otwórz lub Utwórz diagram modelowania.Użyj diagram, który należy do jednego z typów wymienionych w atrybuty klasy polecenia menu.
Otwórz menu skrótów w dowolne miejsce na diagramie.Polecenia powinny być wyświetlane w menu.
Rozwiązywanie problemów z: Jeśli nie ma polecenia menu, upewnij się, że:
Projekt polecenie menu jest wymieniony jako składnik MEF w aktywów kartę w source.extensions.manifest VSIX projektu.
Parametry Import i Export atrybuty są prawidłowe.
QueryStatus Metoda nie jest ustawienie command.Enabled or Visible fields to false.
Typ diagramu modelu używasz (klasy UML, sekwencji i tak dalej) jest wymieniony jako jedna z atrybutów klasy polecenia menu [ClassDesignerExtension], [SequenceDesignerExtension] i tak dalej.
Instalowanie i odinstalowywanie rozszerzenie
Można zainstalować Visual Studio rozszerzenie zarówno na własnym komputerze i na innych komputerach.
Aby zainstalować rozszerzenie
W komputerze, należy znaleźć .vsix pliku, który został zbudowany przez VSIX projektu.
W Solution Explorer, w menu skrótów projektu VSIX, wybierz polecenie Otwórz Folder w Eksploratorze Windows.
Zlokalizuj plik bin\*\YourProject.vsix
Kopiuj .vsix plik do komputera docelowego, na którym chcesz zainstalować rozszerzenia.Może to być własnego komputera lub innym.
Na komputerze docelowym musi mieć jedną z wersji z Visual Studio określone w source.extension.vsixmanifest.
Na komputerze docelowym otwórz .vsix pliku, na przykład, klikając go dwukrotnie.
Instalator rozszerzenie usługi Visual Studio otwiera i instaluje rozszerzenia.
Uruchom lub uruchom ponownie Visual Studio.
Aby odinstalować rozszerzenia
Na Narzędzia menu wybierz Extension Manager.
Rozwiń zainstalowanych rozszerzeń.
Zaznacz rozszerzenie, a następnie wybierz Odinstalowywanie.
Rzadko uszkodzone rozszerzenie nie można załadować i tworzy raport w oknie błędów, ale nie są wyświetlane w Menedżerze rozszerzeń.W takim przypadku można usunąć rozszerzenie przez usunięcie z pliku:
LocalAppData %\Local\Microsoft\VisualStudio\11.0\Extensions
Przykład
Poniższy przykład zawiera kod dla polecenia menu, które będą interchange nazwy dwóch elementów na diagramie klasy.Kod ten musi być zbudowane Visual Studio rozszerzenie projektu i zainstalowane w sposób opisany w poprzedniej sekcji.
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"; }
}
}
}
Zobacz też
Koncepcje
Jak: definiowanie i zainstalować rozszerzenie modelowania
Rozszerzanie modeli UML i diagramów
Jak: Definiowanie obsługi gest na diagramie modelowania
Jak: Definiowanie niestandardowej modelowania element przybornika
Jak: definiowanie ograniczeń sprawdzania poprawności dla modeli UML
Jak: Edycja diagramy sekwencji za pomocą interfejsu API UML
Programowanie przy użyciu interfejsu API UML