Добавление команд и жестов в схемы слоев
Данный пакет дополнительных компонентов 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-манифест размещаются в одном и том же проекте.
Определения расширения с использованием шаблона проекта
Создайте проект в новом решении, воспользовавшись командой Создать проект в меню Файл.
В диалоговом окне Создать проект в разделе Проекты моделирования выберите Расширение команд конструктора слоев или Расширение жестов конструктора слоев.
Шаблон создает проект, который содержит небольшой рабочий пример.
Чтобы протестировать расширение, нажмите сочетание клавиш CTRL+F5 или клавишу F5.
Запустится экспериментальный экземпляр Visual Studio. Создайте схему слоев в этом экземпляре. Расширение команд или жестов должно работать на этой схеме.
Закройте экспериментальный экземпляр и измените пример кода. Дополнительные сведения см. в разделе Перемещение по моделям слоев в коде программы и их обновление.
Можно добавить в один проект несколько команд или обработчиков жестов. Дополнительные сведения см. в одном из следующих разделов:
Определение команды меню
Определение обработчика жестов
Чтобы установить расширение в основном экземпляре Visual Studio или на другом компьютере, найдите файл .vsix в папке bin\*. Скопируйте его на компьютер, на котором его требуется установить, а затем дважды щелкните файл. Чтобы удалить его, выберите Диспетчер расширений в меню Сервис.
Добавление команды или жеста в отдельный VSIX-файл
Если требуется создать один VSIX-файл, который содержит команды, проверяющие элементы слоев и другие расширения, рекомендуется создать один проект для определения VSIX-файла и отдельный проект для обработчиков. Сведения о других типах расширения моделирования см. в разделе Расширение моделей и схем UML.
Добавление расширений слоев в отдельный VSIX-файл
Создайте проект библиотеки классов в новом или имеющемся решении Visual Studio Ultimate. В диалоговом окне Создать проект последовательно щелкните элементы Visual C# и Библиотека классов. Данный проект содержит классы команд или обработчиков жестов.
Примечание
В одной библиотеке классов можно определить несколько классов команд или обработчиков жестов, однако классы проверки слоев следует определять в отдельной библиотеке классов.
Определите или создайте в решении проект VSIX. Проект VSIX содержит файл с именем source.extension.vsixmanifest. Добавление проекта VSIX
В диалоговом окне Создать проект разверните узел Visual C#, затем последовательно щелкните элементы Расширяемость и Проект VSIX.
В обозревателе решений щелкните правой кнопкой мыши проект VSIX, затем выберите Назначить запускаемым проектом.
Щелкните Выбрать выпуски и убедитесь, что Visual Studio Ultimate помечен флажком.
В source.extension.vsixmanifest в разделе Содержимое добавьте проект команд или обработчиков жестов в качестве компонента MEF.
Щелкните Добавить содержимое.
В поле Выбор типа содержимого выберите MEF Component.
В списке Выбор источника щелкните Проект и выберите имя проекта команд или обработчиков жестов.
Сохраните файл.
В разделе Ссылки щелкните Добавить ссылку и выберите среду выполнения для данного пакета дополнительных компонентов.
Вернитесь в проект команд или обработчиков жестов и добавьте следующие ссылки на проект.
Ссылка |
Возможности |
---|---|
Если установлен пакет дополнительных компонентов визуализации и моделирования 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 |
Обновление фигур и схем |
Измените файл классов в проекте библиотеки классов C# таким образом, чтобы он содержал код расширения. Дополнительные сведения см. в одном из следующих разделов:
Определение команды меню
Определение обработчика жестов
См. также раздел Перемещение по моделям слоев в коде программы и их обновление.
Для тестирования этой функции, нажмите сочетание клавиш CTRL+F5 или клавишу F5. Откроется экспериментальный экземпляр Visual Studio. Создайте или откройте схему слоев в этом экземпляре.
Чтобы установить 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. |
Улучшение информации. |