Поделиться через


Добавление команд и жестов в схемы слоев

Данный пакет дополнительных компонентов Visual Studio 2010 позволяет расширять схемы слоев в Visual Studio 2010 Ultimate, определяя контекстное меню, команды или обработчики жестов. Эти расширения можно упаковать в формат Visual Studio Integration Extension (VSIX) и предоставить их другим пользователям Visual Studio Ultimate. Дополнительные сведения см. в разделе Пакеты функций Visual Studio.

При необходимости в одном проекте Visual Studio можно определить несколько команд и обработчиков жестов. Кроме того, в одном VSIX-файле можно объединить несколько проектов. Например, можно определить один VSIX-файл, включающий команды слоя, доменный язык и команды для UML-схем.

Примечание

Если требуется определить пользовательский метод архитектурной проверки, необходимо сделать это в отдельном проекте Visual Studio.Его можно добавить в тот же VSIX-файл, в котором хранятся другие расширения.Дополнительные сведения см. в разделе Добавление пользовательской проверки архитектуры в схемы слоев.

Требования

Требования и инструкции по установке см. в подразделе Требования раздела Создание расширений для схем слоев.

Определение команды или жеста в новом VSIX-файле

Использование шаблона проекта — самый быстрый способ создания расширения. В этом случае код и VSIX-манифест размещаются в одном и том же проекте.

Определения расширения с использованием шаблона проекта

  1. Создайте проект в новом решении, воспользовавшись командой Создать проект в меню Файл.

  2. В диалоговом окне Создать проект в разделе Проекты моделирования выберите Расширение команд конструктора слоев или Расширение жестов конструктора слоев.

    Шаблон создает проект, который содержит небольшой рабочий пример.

  3. Чтобы протестировать расширение, нажмите сочетание клавиш CTRL+F5 или клавишу F5.

    Запустится экспериментальный экземпляр Visual Studio. Создайте схему слоев в этом экземпляре. Расширение команд или жестов должно работать на этой схеме.

  4. Закройте экспериментальный экземпляр и измените пример кода. Дополнительные сведения см. в разделе Перемещение по моделям слоев в коде программы и их обновление.

  5. Можно добавить в один проект несколько команд или обработчиков жестов. Дополнительные сведения см. в одном из следующих разделов:

    Определение команды меню

    Определение обработчика жестов

  6. Чтобы установить расширение в основном экземпляре Visual Studio или на другом компьютере, найдите файл .vsix в папке bin\*. Скопируйте его на компьютер, на котором его требуется установить, а затем дважды щелкните файл. Чтобы удалить его, выберите Диспетчер расширений в меню Сервис.

Добавление команды или жеста в отдельный VSIX-файл

Если требуется создать один VSIX-файл, который содержит команды, проверяющие элементы слоев и другие расширения, рекомендуется создать один проект для определения VSIX-файла и отдельный проект для обработчиков. Сведения о других типах расширения моделирования см. в разделе Расширение моделей и схем UML.

Добавление расширений слоев в отдельный VSIX-файл

  1. Создайте проект библиотеки классов в новом или имеющемся решении Visual Studio Ultimate. В диалоговом окне Создать проект последовательно щелкните элементы Visual C# и Библиотека классов. Данный проект содержит классы команд или обработчиков жестов.

    Примечание

    В одной библиотеке классов можно определить несколько классов команд или обработчиков жестов, однако классы проверки слоев следует определять в отдельной библиотеке классов.

  2. Определите или создайте в решении проект VSIX. Проект VSIX содержит файл с именем source.extension.vsixmanifest. Добавление проекта VSIX

    1. В диалоговом окне Создать проект разверните узел Visual C#, затем последовательно щелкните элементы Расширяемость и Проект VSIX.

    2. В обозревателе решений щелкните правой кнопкой мыши проект VSIX, затем выберите Назначить запускаемым проектом.

    3. Щелкните Выбрать выпуски и убедитесь, что Visual Studio Ultimate помечен флажком.

  3. В source.extension.vsixmanifest в разделе Содержимое добавьте проект команд или обработчиков жестов в качестве компонента MEF.

    1. Щелкните Добавить содержимое.

    2. В поле Выбор типа содержимого выберите MEF Component.

    3. В списке Выбор источника щелкните Проект и выберите имя проекта команд или обработчиков жестов.

    4. Сохраните файл.

  4. В разделе Ссылки щелкните Добавить ссылку и выберите среду выполнения для данного пакета дополнительных компонентов.

  5. Вернитесь в проект команд или обработчиков жестов и добавьте следующие ссылки на проект.

Ссылка

Возможности

Если установлен пакет дополнительных компонентов визуализации и моделирования Visual Studio 2010:

%LocalAppData%\Microsoft\VisualStudio\10.0\Extensions\Microsoft\Visualization and Modeling Feature Pack Runtime\1.0\Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer.dll

ПримечаниеПримечание
Обычно параметру %LocalAppData% соответствует путь имя_диска:\Users\имя_пользователя\AppData\Local.В Windows XP или Windows 2003 вместо %LocalAppData% следует использовать переменную %AppData%.

Если установлен пакет дополнительных компонентов Visual Studio 2010 Feature Pack 2:

…\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Visualization and Modeling Feature Pack Runtime\1.0\Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer.dll

Создание и редактирование слоев

Microsoft.VisualStudio.Uml.Interfaces

Создание и редактирование слоев

Microsoft.VisualStudio.ArchitectureTools.Extensibility

Изменение фигур на схемах

System.ComponentModel.Composition

Определение компонентов с использованием Managed Extensibility Framework (MEF)

Microsoft.VisualStudio.Modeling.Sdk.10.0

Определение расширений моделирования

Microsoft.VisualStudio.Modeling.Sdk.Diagrams.10.0

Обновление фигур и схем

  1. Измените файл классов в проекте библиотеки классов C# таким образом, чтобы он содержал код расширения. Дополнительные сведения см. в одном из следующих разделов:

    Определение команды меню

    Определение обработчика жестов

    См. также раздел Перемещение по моделям слоев в коде программы и их обновление.

  2. Для тестирования этой функции, нажмите сочетание клавиш CTRL+F5 или клавишу F5. Откроется экспериментальный экземпляр Visual Studio. Создайте или откройте схему слоев в этом экземпляре.

  3. Чтобы установить VSIX в главном экземпляре Visual Studio или на другом компьютере, найдите файл .vsix в каталоге bin проекта VSIX. Скопируйте его на компьютер, на котором требуется установить VSIX. Дважды щелкните файл VSIX в проводнике Windows.

    Чтобы удалить его, выберите Диспетчер расширений в меню Сервис.

Определение команды меню

В существующий проект жестов или команд можно добавить дополнительные определения команд меню. Каждая команда определяется классом, который имеет следующие характеристики:

  • Класс объявляется следующим образом:

    [LayerDesignerExtension]

    [Export(typeof(ICommandExtension))]

    public class моя_команда_слоя : ICommandExtension { ... }

  • Пространство имен и имя класса не имеют значения.

  • ICommandExtension реализуют следующие методы:

    • string Text {get;} — ярлык, который отображается в меню.

    • void QueryStatus(IMenuCommand command) — вызывается, когда пользователь щелкает схему правой кнопкой мыши и выбирает, должна ли команда быть видимой и включенной для текущего выделения.

    • void Execute(IMenuCommand command) — вызывается, когда пользователь выбирает команду.

  • Для определения текущего выделения можно импортировать IDiagramContext:

    [Import]

    public IDiagramContext DiagramContext { get; set; }

    ...

    DiagramContext.CurrentDiagram.SelectedShapes.Count()...

Дополнительные сведения см. в разделе Перемещение по моделям слоев в коде программы и их обновление.

Чтобы добавить новую команду, создайте новый файл кода со следующим примером. Затем протестируйте и отредактируйте его.

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();
      }
    }
  }
}

Определение обработчика жестов

В существующий проект VSIX команд или обработчиков жестов можно добавить файл кода, определяющий обработчик жестов:

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
  {
  }
}

Обратите внимание на следующие моменты, касающиеся обработчиков жестов:

  • Расширение IGestureExtension содержит следующие члены:

    OnDoubleClick — вызывается при двойном щелчке в любом месте схемы.

    CanDragDrop — вызывается многократно при перемещении мыши во время перетаскивания элемента на схему. Нужно перемещать мышь быстро.

    OnDragDrop — вызывается при опускании объекта на схему.

  • ShapeElement — первый аргумент каждого метода. Можно преобразовать его в фигуру IShape, которая является более удобной оболочкой для моделирования:

    IShape ishape = targetElement.CreateIShape();
    if (ishape is IDiagram) { ... }
    else { ILayerElement layerElement = s.GetLayerElement(); ... }
    
  • Обработчики для некоторых типов перетащенных элементов уже определены. Например, пользователь может перетащить элементы из обозревателя решений на схему слоев. Для этих типов элементов невозможно определить обработчик перетаскивания. В этих случаях методы DragDrop не вызываются.

Дополнительные сведения о декодировании других элементов при перетаскивании на схему см. в разделе Практическое руководство. Определение обработчика перетаскивания и двойного щелчка на схеме моделирования.

См. также

Другие ресурсы

Перемещение по моделям слоев в коде программы и их обновление

Добавление пользовательской проверки архитектуры в схемы слоев

Практическое руководство. Определение и установка расширения моделирования

Журнал изменений

Дата

Журнал

Причина

Декабрь 2010

Обновлено с учетом пакета дополнительных компонентов Visual Studio 2010 Feature Pack 2.

Улучшение информации.