Adicionando comandos e gestos para diagramas de camada
Este pacote de recursos de 2010 de Visual Studio permite que você estenda os diagramas de camada no Visual Studio 2010 Ultimate , definindo o menu de atalho, ou o menu de contexto, comandos e manipuladores de gesto. Você pode empacotar essas extensões em um Visual Studio integração extensão (VSIX) que você pode distribuir outros Visual Studio Ultimate os usuários. Para obter mais informações, consulte Pacotes de funcionalidades de Visual Studio.
Você pode definir vários manipuladores de comando e gesto na mesma Visual Studio de projeto se desejar. Você também pode combinar várias tais projetos em um VSIX. Por exemplo, você poderia definir um único VSIX que inclui comandos para diagramas UML, uma linguagem específica do domínio e os comandos de camada.
Observação |
---|
Se você desejar definir um método de validação personalizada de arquitetura, você deve defini-la em um separado Visual Studio project. Você pode adicioná-lo para o mesmo VSIX como outras extensões. Para obter mais informações, consulte Adicionar validação de arquitetura de personalizada aos diagramas de camada. |
Requisitos
Para os requisitos e instruções de instalação, consulte Requirements na Criando extensões para diagramas de camada.
A definição de um comando ou um gesto em um novo VSIX
O método mais rápido de criação de uma extensão é usar o modelo de projeto. Isso coloca o código e o manifesto VSIX no mesmo projeto.
Para definir uma extensão usando um modelo de projeto
Criar um projeto em uma nova solução, usando o Novo projeto comando o arquivo menu.
No Novo projeto caixa de diálogo, em Projetos de modelagem, selecione Extensão de comando do Designer de camada ou Extensão de gesto do Designer de camada de.
O modelo cria um projeto que contém um pequeno exemplo de trabalho.
Para testar a extensão, pressione ctrl + f5 ou F5.
Uma instância experimental do Visual Studio é iniciado. Neste exemplo, crie um diagrama de camada. A extensão de comando ou o gesto deve funcionar neste diagrama.
Feche a instância experimental e modificar o código de exemplo. Para obter mais informações, consulte Navegando e atualizando os modelos de camada no código de programa.
Você pode adicionar manipuladores de comando ou o gesto mais no mesmo projeto. Para obter mais informações, consulte uma das seguintes seções:
A definição de um comando de Menu
Definir um manipulador de gesto
Para instalar a extensão na instância principal do Visual Studio, ou em outro computador, localize o .vsix o arquivo em bin\*. Copie-o para o computador onde você deseja instalá-lo e, em seguida, clique duas vezes nele. Para desinstalá-lo, use Extension Manager sobre o Ferramentas menu.
Adicionar um comando ou o gesto para um VSIX separado
Se você deseja criar um VSIX que contém os comandos, validadores de camada e outras extensões, recomendamos que você criar um projeto para definir o VSIX e projetos separados para os manipuladores. Para obter informações sobre outros tipos de extensão de modelagem, consulte Diagramas e modelos UML estendendo.
Adicionar extensões de camada para um VSIX separado
Criar uma biblioteca de classe de projeto em um novo ou existente Visual Studio Ultimate solução. No Novo projeto caixa de diálogo, clique em C# Visual e, em seguida, clique em Biblioteca de classe. Este projeto irá conter o comando ou gesto de classes do manipulador.
Observação Você pode definir mais de uma classe de manipulador de comando ou gesto na biblioteca de uma classe, mas você deve definir as classes da camada de validação em uma biblioteca de classe separada.
Identificar ou criar um projeto VSIX em sua solução. Um projeto VSIX contém um arquivo chamado source.extension.vsixmanifest. Para adicionar um projeto VSIX:
No Novo projeto diálogo caixa, expanda Visual C#, em seguida, clique em extensibilidadee em seguida, clique em VSIX projeto.
No Solution Explorer, clique com o botão direito no projeto VSIX e clique em Set as Startup Project.
Clique em Selecione edições e certifique-se de que Visual Studio Ultimate é verificada.
Em source.extension.vsixmanifest, em conteúdo, adicione o comando ou o gesto de projeto do manipulador como um componente MEF.
Clique em Adicionar conteúdo.
Em Selecione um tipo de conteúdo, selecione MEF componente.
Em Selecionar uma fonte de, clique em projeto e selecione o nome do seu projeto de manipulador de comando ou o gesto.
Salve o arquivo.
Em referências clique em Adicionar referência dee selecione o tempo de execução para este pacote de recursos.
Retornar ao projeto de manipulador de comando ou o gesto e adicione as seguintes referências do projeto.
Referência |
O que isso permite que você faça |
---|---|
Se você tiver o recurso de modelagem e de visualização de 2010 Visual Studio pack instalado: %LocalAppData%\Microsoft\VisualStudio\10.0\Extensions\Microsoft\Visualization e Runtime\1.0\Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer.dll do pacote de recurso de modelagem.
Observação
Costuma ser % LocalAppData % Nome_da_unidade: \Users\nome de usuário\AppData\Local.No Windows XP ou Windows 2003, use % AppData % em vez de % LocalAppData %.
Se você tiver Visual Studio 2010 recurso Pack 2 instalado: 10.0\Common7\IDE\Extensions\Visualization de Visual Studio de …\Microsoft e Runtime\1.0\Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer.dll do pacote de recurso de modelagem. |
Criar e editar as camadas |
Microsoft.VisualStudio.UML.interfaces |
Criar e editar as camadas |
Microsoft.VisualStudio.ArchitectureTools.Extensibility |
Modificar formas em diagramas |
System.ComponentModel.Composition |
Definir componentes usando o Managed Extensibility Framework (MEF) |
Microsoft.VisualStudio.Modeling.SDK.10.0 |
Definir as extensões de modelagem |
Microsoft.VisualStudio.Modeling.SDK.Diagrams.10.0 |
Atualizar formas e diagramas |
Edite o arquivo de classe no C# classe projeto da biblioteca para conter o código para a sua extensão. Para obter mais informações, consulte uma das seguintes seções:
A definição de um comando de Menu
Definir um manipulador de gesto
Consulte também Navegando e atualizando os modelos de camada no código de programa.
Para testar o recurso, pressione CTRL + F5 ou F5. Uma instância experimental do Visual Studio será aberta. Neste exemplo, criar ou abrir um diagrama de camada.
Para instalar o VSIX na instância principal do Visual Studio, ou em outro computador, localize o .vsix de arquivo na bin o diretório do projeto VSIX. Copie-o para o computador onde você deseja instalar o VSIX. Clique duas vezes no arquivo VSIX no Windows Explorer.
Para desinstalá-lo, use Extension Manager sobre o Ferramentas menu.
A definição de um comando de Menu
Você pode adicionar mais definições de comando de menu para um gesto existente ou de um projeto de comando. Cada comando é definido por uma classe que tem as seguintes características:
A classe é declarada da seguinte maneira:
[LayerDesignerExtension]
[Export(typeof(ICommandExtension))]
public class MyLayerCommand : ICommandExtension { ... }
O namespace e o nome da classe não são importantes.
Os métodos que implementam ICommandExtension são da seguinte maneira:
string Text {get;}-O rótulo que aparece no menu.
void QueryStatus(IMenuCommand command)-chamado quando o usuário clica com o botão direito do diagrama e determina se o comando deve ser visível e ativado para a seleção do usuário atual.
void Execute(IMenuCommand command)-chamado quando o usuário seleciona o comando.
Para determinar a seleção atual, você pode importar IDiagramContext:
[Import]
public IDiagramContext DiagramContext { get; set; }
...
DiagramContext.CurrentDiagram.SelectedShapes.Count()...
Para obter mais informações, consulte Navegando e atualizando os modelos de camada no código de programa.
Para adicionar um novo comando, crie um novo arquivo de código que contém o exemplo a seguir. Em seguida, teste e editá-lo.
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();
}
}
}
}
Definir um manipulador de gesto
Ao seu comando existente ou um projeto VSIX do manipulador de gesto, você pode adicionar um arquivo de código que define um manipulador de gesto:
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
{
}
}
Observe os seguintes pontos sobre os manipuladores de gesto:
Os membros do IGestureExtension são da seguinte maneira:
OnDoubleClick -chamado quando o usuário clica duas vezes em qualquer lugar no diagrama.
CanDragDrop - chamado repetidamente conforme o usuário move o mouse enquanto arrasta um item para o diagrama. Ele deve funcionar rapidamente.
OnDragDrop -chamado quando o usuário solta um item para o diagrama.
O primeiro argumento para cada método é um ShapeElement. Você pode converter isso para um IShape, que é um wrapper mais conveniente para modelagem:
IShape ishape = targetElement.CreateIShape(); if (ishape is IDiagram) { ... } else { ILayerElement layerElement = s.GetLayerElement(); ... }
Manipuladores para alguns tipos de item arrastado já estão definidos. Por exemplo, o usuário pode arrastar itens do Solution Explorer para um diagrama de camada. Você não pode definir um manipulador de arrastar para esses tipos de item. Nesses casos, o DragDrop métodos não serão invocados.
Para obter mais informações sobre como decodificar a outros itens quando eles são arrastados para o diagrama, consulte Como: Definir uma queda e clique duas vezes o manipulador de um diagrama de modelagem.
Consulte também
Outros recursos
Navegando e atualizando os modelos de camada no código de programa
Adicionar validação de arquitetura de personalizada aos diagramas de camada
Como: Definir e instalar uma extensão de modelagem
Histórico de alterações
Date |
History |
Motivo |
---|---|---|
Dezembro de 2010 |
Atualizado para Visual Studio 2010 Feature Pack 2. |
Aprimoramento de informações. |