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çãoObservaçã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

  1. Criar um projeto em uma nova solução, usando o Novo projeto comando o arquivo menu.

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

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

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

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

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

  1. 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çãoObservaçã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.

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

    1. No Novo projeto diálogo caixa, expanda Visual C#, em seguida, clique em extensibilidadee em seguida, clique em VSIX projeto.

    2. No Solution Explorer, clique com o botão direito no projeto VSIX e clique em Set as Startup Project.

    3. Clique em Selecione edições e certifique-se de que Visual Studio Ultimate é verificada.

  3. Em source.extension.vsixmanifest, em conteúdo, adicione o comando ou o gesto de projeto do manipulador como um componente MEF.

    1. Clique em Adicionar conteúdo.

    2. Em Selecione um tipo de conteúdo, selecione MEF componente.

    3. Em Selecionar uma fonte de, clique em projeto e selecione o nome do seu projeto de manipulador de comando ou o gesto.

    4. Salve o arquivo.

  4. Em referências clique em Adicionar referência dee selecione o tempo de execução para este pacote de recursos.

  5. 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çãoObservaçã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

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

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

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