Sdílet prostřednictvím


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

  1. Vytvořte projekt v novém řešení pomocí příkazu Nový projekt v nabídce Soubor.

  2. 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.

  3. 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.

  4. 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.

  5. 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

  6. 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

  1. 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.

  2. 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:

    1. V dialogovém okně Nový projekt rozbalte položku Visual C#, potom klikněte na Rozšiřitelnost a Projekt VSIX.

    2. 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í.

    3. Klepněte na tlačítko Vybrat vydání a ujistěte se, že je zaškrtnuto Visual Studio Ultimate.

  3. V source.extension.vsixmanifest, v části Majetek přidejte příkaz nebo projekt obslužné rutiny gesta jako komponentu MEF.

    1. Na kartě Majetek vyberte možnost Nové.

    2. V části Typ vyberte Microsoft.VisualStudio.MefComponent.

    3. V části Zdroj vyberte Projekt v aktuálním řešení a vyberte název příkazu nebo projektu obslužné rutiny gesta.

    4. Uložte soubor.

  4. 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

  1. 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.

  2. 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.

  3. 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

Přidání ověření vlastní architektury do diagramů vrstev

Postupy: Definování a instalace rozšíření modelování